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