概述
在Linux的grep命令中如何使用or,and碗短,not操作符呢受葛?
其實,在grep命令中偎谁,有or和not操作符的等價選項总滩,但是并沒有g(shù)rep and這種操作符。不過呢巡雨,可以使用patterns來模擬and操作的闰渔。下面會舉一些例子來說明在Linux的grep命令中如何使用or,and铐望,not冈涧。
在下面的例子中,會用到這個employee.txt文件正蛙,如下:
$ 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
grep or 操作符
以下四種方法均能實現(xiàn)grep OR的操作督弓。個人推薦方法3。
- 使用 \|
如果不使用grep命令的任何選項乒验,可以通過使用 '|' 來分割多個pattern愚隧,以此實現(xiàn)OR的操作。
grep 'pattern1\|pattern2' filename
例子如下:
$ 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
- 使用選項 -E
grep -E 選項可以用來擴展選項為正則表達式锻全。 如果使用了grep 命令的選項-E奸攻,則應(yīng)該使用 | 來分割多個pattern蒜危,以此實現(xiàn)OR操作。
grep -E 'pattern1|pattern2' filename
例子如下:
$ 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
- 使用 egrep
egrep 命令等同于‘grep -E’睹耐。因此辐赞,使用egrep (不帶任何選項)命令,以此根據(jù)分割的多個Pattern來實現(xiàn)OR操作硝训。
egrep 'pattern1|pattern2' filename
例子如下:
$ 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
- 使用選項 -e
使用grep -e 選項响委,只能傳遞一個參數(shù)。在單條命令中使用多個 -e 選項窖梁,得到多個pattern赘风,以此實現(xiàn)OR操作。
grep -e pattern1 -e pattern2 filename
例子如下:
$ 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
grep and 操作
- 使用 -E 'pattern1.*pattern2'
grep命令本身不提供AND功能纵刘。但是邀窃,使用 -E 選項可以實現(xiàn)AND操作。
grep -E 'pattern1.*pattern2' filename
grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename
第一個例子如下:(其中兩個pattern的順序是指定的)
$ grep -E 'Dev.*Tech' employee.txt
200 Jason Developer Technology $5,500
第二個例子:(兩個pattern的順序不是固定的假哎,可以是亂序的)
$ grep -E 'Manager.*Sales|Sales.*Manager' employee.txt
- 使用多個grep命令
可以使用多個 grep 命令 瞬捕,由管道符分割,以此來實現(xiàn) AND 語義舵抹。
grep -E 'pattern1' filename | grep -E 'pattern2'
例子如下:
$ grep Manager employee.txt | grep Sales
100 Thomas Manager Sales $5,000
500 Randy Manager Sales $6,000
grep not 操作
- 使用選項 grep -v
使用 grep -v 可以實現(xiàn) NOT 操作肪虎。 -v 選項用來實現(xiàn)反選匹配的( invert match)。如惧蛹,可匹配得到除下指定pattern外的所有l(wèi)ines扇救。
grep -v 'pattern1' filename
例子如下:
$ grep -v Sales employee.txt
200 Jason Developer Technology $5,500
300 Raj Sysadmin Technology $7,000
400 Nisha Manager Marketing $9,500
- 可以將NOT操作與其他操作聯(lián)合起來,以此實現(xiàn)更強大的功能 組合香嗓。
如迅腔,這個例子將得到:‘Manager或者Developer,但是不是Sales’的結(jié)果:
$ egrep 'Manager|Developer' employee.txt | grep -v Sales
200 Jason Developer Technology $5,500
400 Nisha Manager Marketing $9,500