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

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

在下面的例子中,会用到这个employee.txt文件,如下:

[plain] view plaincopy
  1. $ cat employee.txt
  2. 100  Thomas  Manager    Sales       $5,000
  3. 200  Jason   Developer  Technology  $5,500
  4. 300  Raj     Sysadmin   Technology  $7,000
  5. 400  Nisha   Manager    Marketing   $9,500
  6. 500  Randy   Manager    Sales       $6,000

(一)Grep OR 操作符

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

1.使用 \|

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

[plain] view plaincopy
  1. grep 'pattern1\|pattern2' filename

例子如下:

[plain] view plaincopy
  1. $ grep 'Tech\|Sales' employee.txt
  2. 100  Thomas  Manager    Sales       $5,000
  3. 200  Jason   Developer  Technology  $5,500
  4. 300  Raj     Sysadmin   Technology  $7,000
  5. 500  Randy   Manager    Sales       $6,000

2.使用选项 -E

grep -E 选项可以用来扩展选项为正则表达式。 如果使用了grep 命令的选项-E,则应该使用 | 来分割多个pattern,以此实现OR操作。

[plain] view plaincopy
  1. grep -E 'pattern1|pattern2' filename

例子如下:

[plain] view plaincopy
  1. $ grep -E 'Tech|Sales' employee.txt
  2. 100  Thomas  Manager    Sales       $5,000
  3. 200  Jason   Developer  Technology  $5,500
  4. 300  Raj     Sysadmin   Technology  $7,000
  5. 500  Randy   Manager    Sales       $6,000

3.使用 egrep

egrep 命令等同于‘grep -E’。因此,使用egrep (不带任何选项)命令,以此根据分割的多个Pattern来实现OR操作.

[plain] view plaincopy
  1. egrep 'pattern1|pattern2' filename

例子如下:

[plain] view plaincopy
  1. $ egrep 'Tech|Sales' employee.txt
  2. 100  Thomas  Manager    Sales       $5,000
  3. 200  Jason   Developer  Technology  $5,500
  4. 300  Raj     Sysadmin   Technology  $7,000
  5. 500  Randy   Manager    Sales       $6,000

4.使用选项 -e

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

[plain] view plaincopy
  1. grep -e pattern1 -e pattern2 filename

例子如下:

[plain] view plaincopy
  1. $ grep -e Tech -e Sales employee.txt
  2. 100  Thomas  Manager    Sales       $5,000
  3. 200  Jason   Developer  Technology  $5,500
  4. 300  Raj     Sysadmin   Technology  $7,000
  5. 500  Randy   Manager    Sales       $6,000

(二)Grep AND 操作

1.使用 -E 'pattern1.*pattern2'

grep命令本身不提供AND功能。但是,使用 -E 选项可以实现AND操作。

[plain] view plaincopy
  1. grep -E 'pattern1.*pattern2' filename
  2. grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename

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

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

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

[plain] view plaincopy
  1. $ grep -E 'Manager.*Sales|Sales.*Manager' employee.txt

2.使用多个grep命令

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

[plain] view plaincopy
  1. grep -E 'pattern1' filename | grep -E 'pattern2'

例子如下:

[plain] view plaincopy
  1. $ grep Manager employee.txt | grep Sales
  2. 100  Thomas  Manager    Sales       $5,000
  3. 500  Randy   Manager    Sales       $6,000

(三)Grep NOT操作

1.使用选项 grep -v

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

[plain] view plaincopy
  1. grep -v 'pattern1' filename

例子如下:

[plain] view plaincopy
  1. $ grep -v Sales employee.txt
  2. 200  Jason   Developer  Technology  $5,500
  3. 300  Raj     Sysadmin   Technology  $7,000
  4. 400  Nisha   Manager    Marketing   $9,500

当然,可以将NOT操作与其他操作联合起来,以此实现更强大的功能 组合。

如,这个例子将得到:‘Manager或者Developer,但是不是Sales’的结果:

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

转载于:https://www.cnblogs.com/franjia/p/4384362.html

grep -v、-e、-E相关推荐

  1. Linux 运维常用命令 find、awk、sed、grep、vi、ps、lsof、rpm

    先用一个脚本,模拟创建 14 个测试文件: #!/bin/bash for ((i=1;i<=10;i++)); do if [ $i -lt 3 ] thentouch /home/mysql ...

  2. Linux shell 学习笔记(2)— 监测程序、磁盘空间和处理文件(ps -ef、top、kill、df、du 、grep、tar)

    1. 监测程序 1.1 检查进程 默认情况下,ps 命令只会显示运行在当前控制台下的属于当前用户的进程. $ ps PID TTY TIME CMD 3081 pts/0 00:00:00 bash ...

  3. 文本查找查找命令的grep 、egrep、fgrep用法的详解

    文本查找查找命令的grep .egrep.fgrep用法的详解 一.学习目标 了解并能熟悉运用grep.egrep.fgrep命令. 二.学习内容 1.grep.egrep.fgrep命令的意思和用法 ...

  4. grep、egrep、fgrep的用法与特性详解

    [转载自]http://tanxw.blog.51cto.com/4309543/1361993 开篇        学习Linux也有一段时间了,对Linux多少也算是有点了解了,越是了解也就越对这 ...

  5. 几个常用的文本处理shell 命令:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk

    内容目录: find 文件查找 grep 文本搜索 xargs 命令行参数转换 sort 排序 uniq 消除重复行 用tr进行转换 cut 按列切分文本 paste 按列拼接文本 wc 统计行和字符 ...

  6. linux中正则表达式、find、xargs、grep以及sed等命令的用法

    查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM"  查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名  find .|x ...

  7. Shell程序设计 | 文本处理工具 :正则表达式、grep、sed、awk

    文章目录 正则表达式 grep sed awk 其它常用工具 cut sort uniq tr 常见面试题 第十行 有效电话号码 统计词频 转置文件 要想使用这些流式处理工具,那么就必须得了解正则表达 ...

  8. Shell—grep、sed、awk

    Shell学习 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界 ...

  9. 四剑客查找字符_linux 四剑客 find 、grep、sed、awk整理

    linux 四剑客 find .grep.sed.awk整理 find 主要是用于查找Linux 操作系统的某个文件.目录所在路径,查找出满足条件的文件或者目录的路径 find / -name *.r ...

最新文章

  1. css中图片整合的使用,CSS Sprites:图片整合技术详细案例
  2. Go 支持Protocol Buffers的配置
  3. 集群、分布式、微服务的概念及异同
  4. 怎么从gitlab上下载别人的代码
  5. 深度学习- 激活函数总结(Sigmoid, Tanh, Relu, leaky Relu, PReLU, Maxout, ELU, Softmax,交叉熵函数)
  6. mysql 多个实例 备份_数据库Mysql备份多个数据库代码实例
  7. 大牛总结的 Git 使用技巧,写得太好了!
  8. 入门级XML学习(三)
  9. JVM内存模型和结构
  10. 东芝2000ac废粉盒怎么二次利用_阜新降级组件回收厂家,废太阳能板回收_振昌_光伏...
  11. 胡波外挂做模具3D装配的方法
  12. python性能测试框架_python性能测试框架locust(一)
  13. 第一章 项目时间管理的基本概念
  14. vue音乐播放器笔记
  15. linux命令里的xz是干嘛的,Ubuntu中的xz命令使用
  16. Autovue Client/Server 性能优化
  17. 微信小程序 + Bmob后端云
  18. 深度学习论文阅读目标检测篇(四)中英文对照版:YOLOv1《 You Only Look Once: Unified, Real-Time Object Detection》
  19. 如何在离开计算机后加密锁定,如何对企业电脑硬盘文件进行加密?
  20. 别人的面经(算法方向)

热门文章

  1. 如果让你拥有100万粉丝,你会做什么
  2. windows cmd color颜色设置
  3. The Interface name: -- index:21 you checked seems not up.
  4. Radware安全研究团队发现了可摧毁不安全IoT设备的“Brickerbot”恶意软件
  5. OC基础回想(十二)协议
  6. linux rpm 安装包制作
  7. Java 用正则表达式 提取目录
  8. 修改注册表真正的提高网速
  9. ASP.NET MVC4中@model使用多个类型实例的方法
  10. 《Python 学习手册4th》 第十二章 if测试和语法规则