[英]How do I print only files that contain the string only in my current directory in Bash shell?
[英]How Do I Print only the lines that contain the third column(Linux)
我在文本文件中有以下幾行,但只想選擇/打印第三列中的那些行:
SUBSCRIBERIDENTIFIER|234908743|
SUBSCRIBERIDENTIFIER|234909544|
SUBSCRIBERIDENTIFIER|234809956|5008596|
SUBSCRIBERIDENTIFIER|234809201|
SUBSCRIBERIDENTIFIER|234908513|
SUBSCRIBERIDENTIFIER|234818667|2000010|
SUBSCRIBERIDENTIFIER|234817353|
SUBSCRIBERIDENTIFIER|234817553|
SUBSCRIBERIDENTIFIER|234818966|5008611|
SUBSCRIBERIDENTIFIER|234817611|2000010|
SUBSCRIBERIDENTIFIER|234817511|
SUBSCRIBERIDENTIFIER|234909292|
輸出是這樣的:
SUBSCRIBERIDENTIFIER|234809956|5008596|
SUBSCRIBERIDENTIFIER|234818667|2000010|
SUBSCRIBERIDENTIFIER|234818966|5008611|
SUBSCRIBERIDENTIFIER|234817611|2000010|
我已經嘗試過此命令,但未產生期望的結果:
cat DEF01_resultBB.txt | grep "SUBSCRIBERIDENTIFIER"|$3
嘗試這個:
$ grep -E '^([^\|]+\|){3} *$' DEF01_resultBB.txt
SUBSCRIBERIDENTIFIER|234809956|5008596|
SUBSCRIBERIDENTIFIER|234818667|2000010|
SUBSCRIBERIDENTIFIER|234818966|5008611|
SUBSCRIBERIDENTIFIER|234817611|2000010|
正則表達式功能非常強大,您可以在這里嘗試: https : //regex101.com/r/NZB5GZ/1
請注意,您的某些行的末尾有多余的空格,因此表達式的末尾是<space>*
。
grep -E
表示將模式解釋為擴展的正則表達式,這就是我們在此處所擁有的。 如果您有GNU grep ,也可以使用--extended-regexp
。
按要求構建正則表達式:
[^\\|]
匹配除方括號內列出的字符以外的任何字符,因此排除|
[...]
匹配里面的任何字符 [^...]
匹配不在里面的任何字符 |
在某些情況下在正則表達式中具有特殊含義,因此,如果您要使用文字|
-從技術上講,在此情況下(方括號中) [^\\|]+
匹配上述一次或多次 [^\\|]+\\|
匹配不包含管道但以管道結尾的任何字符串 ([^\\|]+\\|)
產生上述匹配組-對於下一步很重要 ([^\\|]+\\|){3}
與上面的正好3次匹配 ([^\\|]+\\|){3} *
匹配上面的內容,后跟零個或多個空格
^([^\\|]+\\|){3} *$
使用^
和$
錨,將表達式分別綁定到行的開頭和結尾 將字段分隔符設置為|
並僅輸出包含四列的行(第四列為空)。
awk -F '|' 'NF==4' file
輸出:
SUBSCRIBERIDENTIFIER|234809956|5008596| SUBSCRIBERIDENTIFIER|234818667|2000010| SUBSCRIBERIDENTIFIER|234818966|5008611| SUBSCRIBERIDENTIFIER|234817611|2000010|
您可以使用awk做到這一點:
awk -F '|' '/SUBSCRIBERIDENTIFIER/ && $3' DEF01_resultBB.txt
或grep:
grep 'SUBSCRIBERIDENTIFIER|.*|.*|' DEF01_resultBB.txt
根據輸入的內容,對SUBSCRIBERIDENTIFIER
過濾是多余的,因為它出現在所有行中,因此您可以將上述內容縮短為
awk -F '|' '$3' DEF01_resultBB.txt
和
grep '|.*|.*|' DEF01_resultBB.txt
分別。
或者你可以數|
字符,並且只有包含3個字符的輸出行:
perl -ne 'print if tr/|// == 3' DEF01_resultBB.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.