Linux 命令 ‘grep’ 的或與非

導(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中的TachSales。沒有 ‘\’ 在 ‘|’ 之前,下面的命令是沒有用的。

$ 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中的TachSales

$ 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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • PLEASE READ THE FOLLOWING APPLE DEVELOPER PROGRAM LICENSE...
    念念不忘的閱讀 13,640評論 5 6
  • 導(dǎo)讀 相對于 sed 常常作用于一整行的處理,awk 則比較傾向于將一行分成數(shù)個(gè)“字段”來處理。本文翻譯自 sim...
    默念2009閱讀 853評論 0 1
  • **2014真題Directions:Read the following text. Choose the be...
    又是夜半驚坐起閱讀 11,005評論 0 23
  • 你知道什么是劍玉嗎? 劍玉(Kendama),又稱劍球,托球,是一種源于日本的民間游戲。劍為十字木頭的部分,玉為球...
    陸伸閱讀 15,087評論 0 2
  • 今天讀完了這本書,本來是抱著廢柴撿到絕世武功秘籍,從此輕松當(dāng)上大俠的心態(tài)讀的,讀完后,心涼了,作者說把這些高效學(xué)習(xí)...
    貓良貓良閱讀 1,050評論 0 0

友情鏈接更多精彩內(nèi)容