[转帖]Linux中的grep -v、-e、-E用法小结

linux,grep,用法,小结 · 浏览次数 : 0

小编点评

使用 grep -e 可以实现多个 pattern 的 OR 操作。例如: 12grep -E 'Dev.*Tech' employee.txt 1$ grep -E 'Manager.*Sales|Sales.*Manager' employee.txt2 -E 'pattern1.*pattern2' 命令首先使用 pattern1 来匹配所有与 pattern2 相匹配的字符串,然后使用结果过滤出所有与 pattern1 相匹配的字符串。 -v 选项可以实现反选匹配的,例如: 1234$ grep -v Sales employee.txt 200  Jason   Developer  Technology  $5,500  300  Raj     Sysadmin   Technology  $7,000  500  Randy   Manager    Sales       $6,000

正文

https://www.jb51.net/article/266590.htm

 

 
grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,这篇文章主要介绍了Linux之grep -v、-e、-E用法总结,需要的朋友可以参考下
 

简介

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

在Linux的grep命令中如何使用OR,AND,NOT操作符呢?

其实,在grep命令中,有OR和NOT操作符的等价选项,但是并没有grep AND这种操作符。不过呢,可以使用patterns来模拟AND操作的。下面会举一些例子来说明在Linux的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 操作符

以下四种方法均能实现grep OR的操作。个人推荐方法3.

1.使用 \|

如果不使用grep命令的任何选项,可以通过使用 '\|' 来分割多个pattern,以此实现OR的操作。

1
grep 'pattern1\|pattern2' filename

例子如下:

1
2
3
4
5
$ 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 选项可以用来扩展选项为正则表达式。 如果使用了grep 命令的选项-E,则应该使用 | 来分割多个pattern,以此实现OR操作。

1
grep -E 'pattern1|pattern2' filename  

例子如下:

1
2
3
4
5
$ 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 (不带任何选项)命令,以此根据分割的多个Pattern来实现OR操作.

1
egrep 'pattern1|pattern2' filename

例子如下:

1
2
3
4
5
$ 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.使用选项 -e

使用grep -e 选项,只能传递一个参数。在单条命令中使用多个 -e 选项,得到多个pattern,以此实现OR操作。

1
grep -e pattern1 -e pattern2 filename

例子如下:

1
2
3
4
5
$ 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 选项可以实现AND操作。

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

第一个例子如下:(其中两个pattern的顺序是指定的)

1
2
$ grep -E 'Dev.*Tech' employee.txt 
200  Jason   Developer  Technology  $5,500

第二个例子:(两个pattern的顺序不是固定的,可以是乱序的)

1
$ grep -E 'Manager.*Sales|Sales.*Manager' employee.txt

2.使用多个grep命令

可以使用多个 grep 命令 ,由管道符分割,以此来实现 AND 语义。

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

例子如下:

1
2
3
$ grep Manager employee.txt | grep Sales 
100  Thomas  Manager    Sales       $5,000 
500  Randy   Manager    Sales       $6,000

(三)Grep NOT操作

1.使用选项 grep -v

使用 grep -v 可以实现 NOT 操作。 -v 选项用来实现反选匹配的( invert match)。如,可匹配得到除下指定pattern外的所有lines。

1
grep -v 'pattern1' filename

例子如下:

1
2
3
4
$ 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’的结果:

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

到此这篇关于Linux之grep -v、-e、-E用法总结的文章就介绍到这了,更多相关linux grep -v命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

与[转帖]Linux中的grep -v、-e、-E用法小结相似的内容:

[转帖]KVM安装

https://www.cnblogs.com/weilu2/p/linux_kvm_install_config.html 检查CPU是否支持硬件虚拟化 在开始安装KVM之前,需要检查系统中的CPU是否支持硬件虚拟化的特性,执行下面的命令: grep -E '(vmx|svm)' /proc/cp

[转帖]Linux中的Grep命令(在文件中查找文本)

[日期:2020-05-14] 来源:Linux公社 作者:醉落红尘 [字体:大 中 小] grep命令是(global regular expression print,全局正则表达式输出)的缩写,它是Linux中功能最强大且最常用的命令之一。 grep在一个或多个输入文件中搜索与给定模式匹配的行

[转帖]掌握Linux中的12个grep命令

http://blog.itpub.net/70023145/viewspace-2924123/ 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧。 grep是每个Linux发行版都预装的一个强有力的文件模式搜索工具。无论何种原因,如果你的系统

[转帖] Linux文本命令技巧(下)

https://www.cnblogs.com/codelogs/p/16060108.html 简介# 前一篇介绍了Linux中一些基本的文本命令与使用技巧,但是结合场景过少,本篇结合工作中一些常见的场景介绍一些技巧。 数据提取# 数据提取在文本处理中是常见,提取单个值可以使用grep -o功能,

[转帖] Linux命令拾遗-文本处理篇

https://www.cnblogs.com/codelogs/p/16060413.html 简介# 这是Linux命令拾遗系列的第二篇,本篇主要介绍Linux中与文本处理相关的命令,如xargs、grep、sed、awk等。 本系列文章索引Linux命令拾遗-入门篇 常用文本相关命令# cat

[转帖]Linux下AWK、SED、GREP、FIND命令详解

https://www.jianshu.com/p/d54e0359db01 AWK AWK是一个优良的文本处理工具,Linux和Unix环境中现有的功能最强大的数据处理引擎之一。 语法 awk [选项参数] 'script' var=value file(s) 或 awk [选项参数] -f sc

[转帖]Red Hat Enterprise Linux 8 和 9 中可用的 IO 调度程序

Red Hat 弃用了 Red Hat Enterprise Linux 7 中可用的 I/O 调度程序,并引入了四个新的 I/O 调度程序,如下所示, 运行以下命令检查 RHEL8 和 RHEL9 中可用的调度程序 # dmesg | grep -i scheduler [ 0.507104] i

[转帖]Linux-文本处理三剑客grep详解

https://developer.aliyun.com/article/885611?spm=a2c6h.24874632.expert-profile.311.7c46cfe9h5DxWK 简介: grep家族 grep:在文件中全局查找指定的正则表达式,并打印所有包含该表达的行 egrep:扩

[转帖]grep 命令进阶.

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。 grep [-acinv] [--color=auto] '查找字

[转帖]如何为多个字符串和模式使用Grep

[日期:2020-05-14] 来源:Linux公社 作者:醉落红尘 [字体:大 中 小] grep是一个功能强大的命令行工具,可让您在一个或多个输入文件中搜索与正则表达式匹配的行,并将每个匹配的行写入标准输出。 在本文中,我们将向您展示如何使用GNU grep搜索多个字符串或模式。 Grep多种模