導(dǎo)語
grep, print lines matching a pattern。 本文是翻譯文章,翻譯自 grep-or-and-not-operators。
習(xí)慣了英文者,可自行前往閱讀。
對于‘grep’,我們有OR和NOT操作符,卻沒有AND。不過,我們可以模擬一個(gè)。下面的例子會(huì)幫助你弄懂如何在Linux ‘grep’命令中使用OR、AND和NOT。
employee.txt 文件會(huì)在接下來的例子中使用。
$ cat employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy Manager Sales $6,000
1. ‘grep’ OR
這里有4種方法可以實(shí)現(xiàn)‘grep’ OR 。我更傾向于第三種。
1.1 ‘gerp’ OR 使用 '|'
如果你使用 ‘grep’ 命令不帶任何選項(xiàng),你需要使用 ‘|’ 來作OR條件的分隔符。
grep 'pattern1\|pattern2' filename
比如,你想打印出employee.txt中的Tach和Sales。沒有 ‘\’ 在 ‘|’ 之前,下面的命令是沒有用的。
$ grep 'Tech\|Sales' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000
1.2 ‘gerp’ OR 使用 ‘-E’
‘grep’ ‘-E’ 選項(xiàng)表示使用擴(kuò)展的正則表達(dá)式。如果你使用 ‘grep’ 命令時(shí)帶 ‘-E’,你只需要用途 ‘|’ 來分隔OR條件。
grep -E 'pattern1|pattern2' filename
打印出employee.txt中的Tach和Sales:
$ grep -E 'Tech|Sales' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000
1.3 ‘gerp’ OR 使用 ‘egrep’
‘egrep’ 就是 ‘grep -E’。所以
$ egrep 'Tech|Sales' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000
1.4 ‘gerp’ OR 使用 ‘grep -e’
使用 ‘grep -e’ 選項(xiàng)你僅可以傳遞一個(gè)參數(shù)。在一個(gè)命令中使用多個(gè) ‘-e’ 選項(xiàng)可以指定多個(gè)OR條件。Example:
$ grep -e Tech -e Sales employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000
2. ‘grep’ AND
‘grep’ 命令沒有 AND 操作符。但是,上文說了,我們可以模擬它。
2.1 ‘grep’ AND 使用 ‘-E pattern1.*pattern2’
grep -E 'pattern1.*pattern2' filename grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename
Example:
$ grep -E 'Dev.*Tech' employee.txt 200 Jason Developer Technology $5,500
2.2 ‘grep’ AND 使用多個(gè) ‘grep’ 命令
你還可以使用多個(gè) ‘grep’ 命令加管道(pipe)的方式來實(shí)現(xiàn) AND 操作。
grep -E 'pattern1' filename | grep -E 'pattern2'
Example:
$ grep Manager employee.txt | grep Sales 100 Thomas Manager Sales $5,000 500 Randy Manager Sales $6,000
3. ‘grep’ NOT
使用 ‘grep -v’ 你可以模擬NOT操作。
-v, --invert-match
Invert the sense of matching, to select non-matching lines.
使用 ‘-v’ 選項(xiàng)來反向匹配,選擇不匹配的行。
grep -v 'pattern1' filename
舉個(gè)例子,打印出所有不包含關(guān)鍵詞 “Sales” 的 行:
$ grep -v Sales employee.txt 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500