Linux命令:grep命令AND、OR、NOT实例

简介

在grep中,我们有相当于OR和NOT运算符的选项,但没有AND运算符。但是,我们可以使用模式来模拟AND。在本文的例子将有助于理解如何使用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操作符

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

1. 使用“\|”

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

grep 'pattern1\|pattern2' filename

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

[jinguang1@localhost ~]$ grep "Tech|Sales" employee.txt
[jinguang1@localhost ~]$ 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来分隔多个模式。
grep -E 'pattern1|pattern2' filename

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

[jinguang1@localhost ~]$ 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 'pattern1|pattern2' filename

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

[jinguang1@localhost ~]$ 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选项。

grep -e pattern1 -e pattern2 filename

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

[jinguang1@localhost ~]$ 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选项来模拟。

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

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

[jinguang1@localhost ~]$ grep -E "Dev.*Tech" employee.txt
200  Jason   Developer  Technology  $5,500

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

[jinguang1@localhost ~]$ grep -E "Manager.*Sales|Sales.*Manager" employee.txt
100  Thomas  Manager    Sales       $5,000
500  Randy   Manager    Sales       $6,000

2. 使用多个grep命令

可以使用管道来连接多个grep命令来模拟AND操作符。

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

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

[jinguang1@localhost ~]$ 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所有不包含指定模式的行。

grep -v 'pattern1' filename

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

[jinguang1@localhost ~]$ grep -v Sales employee.txt
200  Jason   Developer  Technology  $5,500
300  Raj     Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500

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

[jinguang1@localhost ~]$ grep -E "Manager|Developer" employee.txt | grep -v Sales
200  Jason   Developer  Technology  $5,500
400  Nisha   Manager    Marketing   $9,500

 

### Linux `grep` 命令逻辑限定使用教程 #### 一、基本概念 `grep` 是一种强大的文本搜索工具,能够利用正则表达式来查找文件中的模式匹配项,并将这些行打印出来[^3]。 #### 二、逻辑限定符介绍 为了更精确地控制搜索条件,在实际应用中可以采用一些特殊的语法结构来进行逻辑组合: - **交集操作 (AND)**:通过 `-e` 参数或者直接在同一命令内指定多个模式串实现多关键字同时存在的筛选效果。 ```bash grep -e "word1" -e "word2" filename ``` - **并集操作 (OR)**:借助管道符 `|` 或者扩展版的 `egrep` 来完成两个及以上不同关键词任意存在情况下的检索工作。 ```bash egrep 'pattern1|pattern2' file.txt ``` - **否定操作 (NOT)**:运用反向选择功能排除含有某些字符串的结果,即只保留不包含特定词句的内容。 ```bash grep -v "exclude_word" input_file > output_file ``` - **复合查询**:结合上述几种方式构建更为复杂的查询语句,比如先做一次初步过滤再进一步细化最终得到所需数据集合。 #### 三、实例展示 假设有一个名为 `example.log` 的日志文件,现在要从中找出既包含 “error” 又包含 “timeout”的记录,但是不想看到任何带有 “ignore_this_line” 字样的条目,则可以用如下指令达成目的: ```bash grep -i "error" example.log | grep -i "timeout" | grep -vi "ignore_this_line" ``` 这里分别用了大小写敏感度调整参数 `-i` 和去除不需要的信息选项 `-v` ,并通过管道连接实现了逐步精炼的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值