7 个 Linux Grep OR、Grep AND、Grep NOT 运算符示例
问题:您能否通过一些示例解释如何在 Unix grep 命令中使用 OR、AND 和 NOT 运算符?
答:在 grep 中,我们有与 OR 和 NOT 运算符等效的选项。没有 grep AND 运算符。但是,您可以使用模式模拟 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 运算符
对 grep OR 使用以下 4 种方法中的任何一种。对于 grep OR 运算符,我更喜欢下面提到的方法 3。
1.Grep OR 使用 \|
如果使用不带任何选项的 grep 命令,则需要使用 \| 为 or 条件分隔多个模式。
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. Grep OR使用 -E
grep -E 选项用于扩展正则表达式。如果您使用带有 -E 选项的 grep 命令,您只需要使用 | 为 or 条件分隔多个模式。
grep -E 'pattern1|pattern2' filename
例如,从employee.txt 文件中grep Tech 或Sales。只需使用 | 分隔多个 OR 模式。
$ 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. Grep OR 使用 egrep
egrep 与'grep -E' 完全相同。因此,使用 egrep(不带任何选项)并为 or 条件分隔多个模式。
egrep 'pattern1|pattern2' filename
例如,从employee.txt 文件中grep Tech 或Sales。只需使用 | 分隔多个 OR 模式。
$ 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. Grep OR 使用 grep -e
使用 grep -e 选项,您只能传递一个参数。在单个命令中使用多个 -e 选项可为 or 条件使用多个模式。
grep -e pattern1 -e pattern2 filename
例如,从employee.txt 文件中grep Tech 或Sales。将多个 -e 选项与 grep 一起用于多个 OR 模式。
$ 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
5. Grep AND 使用 -E 'pattern1.*pattern2'
grep 中没有 AND 运算符。但是,您可以使用 grep -E 选项模拟 AND。
grep -E 'pattern1.*pattern2' filename
grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename
下面的示例将 grep 所有包含“Dev”和“Tech”的行(以相同的顺序)。
$ grep -E 'Dev.*Tech' employee.txt
200 Jason Developer Technology $5,500
以下示例将 grep 中包含“Manager”和“Sales”的所有行(以任何顺序)。
$ grep -E 'Manager.*Sales|Sales.*Manager'employee.txt
6. Grep AND 使用多个 grep 命令
您还可以使用多个由管道分隔的 grep 命令来模拟 AND 场景。
grep -E 'pattern1' filename | grep -E 'pattern2'
下面的示例将 grep 在同一行中同时包含“Manager”和“Sales”的所有行。
$ grep Manager employee.txt | grep Sales
100 Thomas Manager Sales $5,000
500 Randy Manager Sales $6,000
Grep NOT
7. Grep NOT使用 grep -v
使用 grep -v 可以模拟 NOT 条件。-v 选项用于反转匹配。即它匹配除给定模式之外的所有行。
grep -v 'pattern1' filename
例如,显示除包含关键字“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 与其他运算符结合以获得一些强大的组合。
例如,以下将显示经理或开发人员(机器人忽略销售)。
$ egrep 'Manager|Developer' employee.txt | grep -v Sales
200 Jason Developer Technology $5,500
400 Nisha Manager Marketing $9,500
- 点赞
- 收藏
- 关注作者
评论(0)