Grep
將多個 grep 與正則表達式結合起來
我有這個文件:
10 replies Big Horse 123sdf562 replies 1354654 Fat Cat 2 replies White Horse Big Cat Little Dog 5 replies 725vgfvjgh123 Black Horse Brown Cow 8798jgjh
我想提取包含單詞 horse 的行,單詞以數字開頭的回復和數字包圍的字母。所以我想要的輸出必須是:
10 replies Big Horse 123sdf562 2 replies White Horse 5 replies 725vgfvjgh123 Black Horse
此程式碼
grep '[0-9] replies\|[0-9][a-z]\|Horse' file
返回Big Horse 123sdf562 2 replies White Horse 5 replies 725vgfvjgh123 Black Horse 8798jgjh
但
8798jgjh
不應出現在輸出中,因為jgjh
它沒有被數字包圍。
grep '[0-9] replies\|[0-9][a-z][0-9]\|Horse' file
不起作用。那麼,如何才能獲得正確的輸出呢?
您可以將其與 GNU 一起使用
grep
:$ grep 'Horse\|^[0-9]\+ replies$\|^[0-9]\+[^0-9]\+[0-9]\+$' file 10 replies Big Horse 123sdf562 2 replies White Horse 5 replies 725vgfvjgh123 Black Horse
您的命令的問題是您沒有量化
[a-z]
,因此它只查找一個字元。
你可以用這個
grep
。在多個地方使用量詞(在 BRE 中)的想法\{1,\}
是匹配一起使用的組中的至少一個字元。一個攜帶式版本將是做grep '[0-9]\{1,\}[[:space:]]\{1,\}replies\|Horse\|[0-9]\{1,\}[a-z]\{1,\}[0-9]\{1,\}' file
在
grep
支持 ERE 的版本上,例如 GNU grep,不需要表達式上的額外轉義字元grep -E '[0-9]{1,}[[:space:]]+replies|Horse|[0-9]{1,}[a-z]{1,}[0-9]{1,}' file
您可以將字元類組替換為與區域無關的組
[0-9]
,例如and 。[a-z]``[[:digit:]]``[[:lower:]]