Linux命令-Grep逻辑:OR、AND、NOT

Grep 的 OR, AND 和NOT

 

grep这个强大的文本处理工具,在linux的命令行中几乎随时要使用,被用来过滤一些关键词。要过滤的关键词有时是好几个,关键词之间就有了OR, AND 和NOT各种关系,所以有必要了解grep的OR, AND 和NOT是如何操作的

在grep中,有等同于OR和NOT操作符的选项,但没有grep AND操作符,可以使用模式来模拟AND。

以下是下面示例中使用的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操作符

对于grep OR,使用以下4种方法之一。推荐第3种用于grep OR操作符。

1. 使用 \|

如果使用grep命令而没有任何选项,则需要使用\|来分隔多个模式以进行或条件。

grep 'pattern1\|pattern2' filename

例如,从employee.txt文件中grep出Tech或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
2. 使用 -E

grep -E选项用于扩展正则表达式。如果使用带有-E选项的grep命令,则只需使用|来分隔多个模式以进行或条件。

grep -E 'pattern1|pattern2' filename

例如,从employee.txt文件中grep出Tech或Sales。只需使用|来分隔多个OR模式。

3. ★使用 egrep

egrep与“grep -E”完全相同。因此,使用egrep(不带任何选项)并分隔多个模式以进行或条件。

egrep 'pattern1|pattern2' filename

例如,从employee.txt文件中grep出Tech或Sales。只需使用|来分隔多个OR模式。

4. 使用 grep -e

使用grep -e选项可以传递一个参数。使用单个命令中的多个-e选项以使用多个模式进行或条件。

grep -e pattern1 -e pattern2 filename

例如,从employee.txt文件中grep出Tech或Sales。使用多个-e选项与grep一起使用多个OR模式。

 

二、Grep AND

1.使用-E ‘pattern1.*pattern2 ’

grep中没有AND操作符。但是,您可以使用grep -E选项模拟AND。

grep -E 'pattern1.*pattern2' filename
grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename
例如,从employee.txt文件中grep出同时包含“Dev”和“Tech”的所有行(顺序相同)

$ grep -E 'Dev.*Tech' employee.txt
200 Jason Developer Technology $5,500
例如,从employee.txt文件中grep出同时包含“Manager”和“Sales”的所有行(任意顺序)

$ grep -E 'Manager.*Sales|Sales.*Manager' employee.txt
2.使用多个grep命令以|分隔来模拟AND场景。

grep -E 'pattern1' filename | grep -E 'pattern2'

 

三、Grep NOT

使用grep -v

使用grep -v可以模拟NOT条件。-v选项用于反向匹配,即匹配除给定模式之外的所有行。

例如,显示除了包含关键字“Sales”之外的所有行。

$ 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)。

$ egrep 'Manager|Developer' employee.txt | grep -v Sales
200 Jason Developer Technology $5,500
400 Nisha Manager Marketing $9,500

 

 


原文:https://blog.csdn.net/chrshh2006/article/details/138127290

posted @ 2024-07-10 14:22  iSunXiaoXiao  阅读(3)  评论(0编辑  收藏  举报