190325-grep命令AND、OR、NOT实例

grep命令AND、OR、NOT实例

简介

在grep中,我们有相当于OR和NOT运算符的选项,但没有AND运算符。但是,我们可以使用模式来模拟AND。在本文的例子将有助于理解如何使用grep命令的OR, AND和NOT运算进行文本的搜索

本文将使用下面的employee.txt文件作为例子讲解:

1
2
3
4
5
6
$ 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操作符

可以使用下面提供的4种方法来实现grep OR功能。

  1. 使用“|”
    如果使用不带任何选项的grep命令,则需要使用”|“来分隔条件OR的多个模式。

    1
    grep 'pattern1\|pattern2' filename

    例如,grep来自employee.txt文件的Tech或Sales。如果分隔符|前没有反斜杠,则以下操作无效。

    1
    2
    3
    4
    5
    6
    [root@laosanxin ~]# grep "Tech|Sales" employee.txt
    [root@laosanxin ~]# 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命令,则只需使用|为条件OR来分隔多个模式。

    1
    grep -E 'pattern1|pattern2' filename

    例如,grep来自employee.txt文件的Tech或Sales。仅使用“|”来作为多个模式。

    1
    2
    3
    4
    5
    [root@laosanxin ~]# 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功能完全相同。

    1
    egrep 'pattern1|pattern2' filename

    例如,grep来自employee.txt文件的Tech或Sales。仅使用“|”来作为多个模式。

    1
    2
    3
    4
    5
    [root@laosanxin ~]# 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 -e
    使用grep -e选项,你仅能使用一个参数。如果要使用多个模式,则需要在命令中提供多个-e选项。

    1
    grep -e pattern1 -e pattern2 filename

    例如,grep来自employee.txt文件的Tech或Sales。使用多个-e选项来支持多个OR模式。

    1
    2
    3
    4
    5
    [root@laosanxin ~]# 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选项来模拟。

    1
    2
    grep -E 'pattern1.*pattern2' filename
    grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename

    下面的例子将grep所有同时包含“Dev”和”Tech”的行,并且保持包含字符串的相应顺序。

    1
    2
    [root@laosanxin ~]# grep -E "Dev.*Tech" employee.txt
    200 Jason Developer Technology $5,500
  2. 使用多个grep命令
    可以使用管道来连接多个grep命令来模拟AND操作符。

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

    下面的例子将grep所有包含“Manager”和”Sales”的行,且这个字符串可以以任意顺序出现。

    1
    2
    3
    [root@laosanxin ~]# grep Manager employee.txt | grep Sales
    100 Thomas Manager Sales $5,000
    500 Randy Manager Sales $6,000

Grep NOT

使用grep -v选项可以模拟NOT操作符。-v选项为相反匹配设计,它可以match所有不包含指定模式的行。

1
grep -v 'pattern1' filename

下面的例子中将显示所有不包含“Sales”关键字的行。

1
2
3
4
5
[root@laosanxin ~]# grep -v Sales employee.txt
$ cat employee.txt
200 Jason Developer Technology $5,500
300 Raj Sysadmin Technology $7,000
400 Nisha Manager Marketing $9,500

下面的例子中将显示所有的Manager和Developer,但忽略Sales。

1
2
3
[root@laosanxin ~]# grep -E "Manager|Developer" employee.txt | grep -v Sales
200 Jason Developer Technology $5,500
400 Nisha Manager Marketing $9,500

参考资料

grep命令AND、OR、NOT实例

# ,
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×