grep 實現and or 操作

2021-07-24 20:53:05 字數 4050 閱讀 7383

在linux的grep命令中如何使用or,and,not操作符呢?

其實,在grep命令中,有or和not操作符的等價選項,但是並沒有grep and這種操作符。不過呢,可以使用patterns來模擬and操作的。下面會舉一些例子來說明在linux的grep命令中如何使用or,and,not。

在下面的例子中,會用到這個employee.txt檔案,如下:

[plain] view plain copy

$ 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 操作符

以下四種方法均能實現grep or的操作。個人推薦方法3.

1.使用 \|

如果不使用grep命令的任何選項,可以通過使用 '\|' 來分割多個pattern,以此實現or的操作。

[plain] view plain copy

grep 'pattern1\|pattern2' filename  

例子如下:

[plain] view plain copy

$ 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  

2.使用選項 -e

grep -e 選項可以用來擴充套件選項為正規表示式。 如果使用了grep 命令的選項-e,則應該使用 | 來分割多個pattern,以此實現or操作。

[plain] view plain copy

grep -e 'pattern1|pattern2' filename

例子如下:

[plain] view plain copy

$ 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  

3.使用 egrep

egrep 命令等同於『grep -e』。因此,使用egrep (不帶任何選項)命令,以此根據分割的多個pattern來實現or操作.

[plain] view plain copy

egrep 'pattern1|pattern2' filename  

例子如下:

[plain] view plain copy

$ 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  

4.使用選項 -e

使用grep -e 選項,只能傳遞乙個引數。在單條命令中使用多個 -e 選項,得到多個pattern,以此實現or操作。

[plain] view plain copy

grep -e pattern1 -e pattern2 filename  

例子如下:

[plain] view plain copy

$ 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 操作

1.使用 -e 'pattern1.*pattern2'

grep命令本身不提供and功能。但是,使用 -e 選項可以實現and操作。

[plain] view plain copy

grep -e 'pattern1.*pattern2' filename  

grep -e 'pattern1.*pattern2|pattern2.*pattern1' filename  

第乙個例子如下:(其中兩個pattern的順序是指定的)

[plain] view plain copy

$ grep -e 'dev.*tech' employee.txt  

200  jason   developer  technology  $5,500  

第二個例子:(兩個pattern的順序不是固定的,可以是亂序的)

[plain] view plain copy

$ grep -e 'manager.*sales|sales.*manager' employee.txt  

2.使用多個grep命令

可以使用多個 grep 命令 ,由管道符分割,以此來實現 and 語義。

[plain] view plain copy

grep -e 'pattern1' filename | grep -e 'pattern2'  

例子如下:

[plain] view plain copy

$ grep manager employee.txt | grep sales  

100  thomas  manager    sales       $5,000  

500  randy   manager    sales       $6,000  

(三)grep not操作

1.使用選項 grep -v

使用 grep -v 可以實現 not 操作。 -v 選項用來實現反選匹配的( invert match)。如,可匹配得到除下指定pattern外的所有lines。

[plain] view plain copy

grep -v 'pattern1' filename  

例子如下:

[plain] view plain copy

$ grep -v sales employee.txt  

200  jason   developer  technology  $5,500  

300  raj     sysadmin   technology  $7,000  

400  nisha   manager    marketing   $9,500  

當然,可以將not操作與其他操作聯合起來,以此實現更強大的功能 組合。

如,這個例子將得到:『manager或者developer,但是不是sales』的結果:

[plain] view plain copy

$ egrep 'manager|developer' employee.txt | grep -v sales  

200  jason   developer  technology  $5,500  

400  nisha   manager    marketing   $9,500  

NGINX實現IF語句裡的AND,OR多重判斷

nginx實現if語句裡的and,or多重判斷 一 nginx rewrite規則相關指令有if rewrite set return break等 1.其中rewrite是最關鍵的指令。乙個簡單的nginx rewrite規則語法如下 rewrite b html play.php?video 1...

對列舉值 Enum 進行位操作(AND OR)

這裡我們可以解釋為什麼第三個值showtoolbox可以為4,5.而不能為3。也就是說它的值不應該是前幾項值的復合值。我的理解是 不能前幾位的和 有乙個比較簡單的方法就是用2的n次方來依次為每一項賦值,例如 1,2,4,8,16,32,64.對列舉值 enum 進行位操作 and or 這是我在的第...

C語言程式設計實現grep

簡介 1.字串比較strncmp函式與strcmp函式不同的地方是引數裡面是否有n。n代表比較的字元的個數。但是strncmp的功能只能從開頭比較,沒有grep的功能 2.對於接受的引數,如 argv 1 argv 2 採用巨集定義來的方法來區分引數之間不同的含義。如 define key ptr ...