grep -v、-e、-E

在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
时间: 2024-10-15 18:13:56

grep -v、-e、-E的相关文章

[转帖]grep -v、-e、-E

grep -v.-e.-E 转帖: https://www.cnblogs.com/franjia/p/4384362.html 发现 一些工具虽然一直在用 但是知道的还是少 哎. 概述 在Linux的grep命令中如何使用or,and,not操作符呢? 其实,在grep命令中,有or和not操作符的等价选项,但是并没有grep and这种操作符.不过呢,可以使用patterns来模拟and操作的.下面会举一些例子来说明在Linux的grep命令中如何使用or,and,not. 在下面的例子中,

linux 文件搜索命令 grep、-i、-v ^#

grep /bin/grepgrep -iv [指定字条串] [文件]在文件中搜索字符串匹配的行并输出-i 不区分大小写 -v 排除指定字符串 grep -i java /etc/profile grep -v ^# /etc/profile不显示以#开头的行 原文地址:https://www.cnblogs.com/BaiLaowu/p/9499505.html

004-用户、组、权限管理命令及bash配置文件、管道、重定向、grep

l  1.用户管理命令 1.)创建用户命令 useradd  [OPTIONS] USERNAME -u(UID):指定用户UID -g(GID):指定基本组 -G( group,...):指定附加组 -c"COMMENT":指定注释信息 -d(home_dir):指定家目录/path/to/directory -s:指定SHELL路径(/etc/shells指定了当前系统可用的安全shell) -m –k:强行为用户创建家目录 -M:不创建用户家目录 /etc/login.defs

grep文本处理工具、正则表达式

grep是一个文本检索工具,号称linux文本处理三大剑客之一,通常会结合正则表达式使用,支持基本正则表达式和扩展的正则表达式,功能很强大,给我们搜索文本带来了很大的便利,默认情况下,它是贪婪模式,能匹配多长就匹配多长,会将匹配到的整行显示出来.另外两大剑客:sed.awk. grep常用选项: grep -i:忽略大小写 [[email protected] ~]# grep -i tom /etc/passwd tom:x:506:506::/home/tom:/bin/bash Tom:x

Linux3:more、which、find、chmod、tar、diff、grep、ps、netstat、uname

more 类似cat,不过more不是将整个文件内容从上到下显示在屏幕上的,而是以一页一页的显示方便使用者逐页阅读.more最基本的指令就是space即往下翻一页,b即往回翻一页显示,而且还有搜索字符串的功能 +n:从第n行开始显示 -n:定义屏幕大小为n行 +/pattern:在每个档案显示前搜索该字符串patern,然后从该字符串前两行之后显示 -p:通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似 -s:把连续的多个空行显示为一行 -u:把文件内容中的下划线去掉 常用操作命令: En

cat、tail、head、tee、grep、wc、sort文件操作和过滤

详见;http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt103 文件操作和过滤 绝大多数命令行工作是针对文件的.我们会在本节中讨论如何观察及过滤文件内容,使用一条命令从文件中提取所需信息,以及对文件的内容进行排序. cat.tail.head.tee:文件打印命令这些命令的语法基本上相同的:命令名 [选项] [文件],而且您可以在管道中使用这些命令.这些命令的功能都是根据特定的条件选择文件内容进行打印. cat 工具会将文件的全部

grep、sed、awk基础

grep grep :根据模式,搜索文本,并将符合模式的文本行显示出来, 使用基本正则表达式定义的模式来过滤文本的命令: -i :忽略大小写 --color :加上颜色, -v :显示没有被模式匹配到的行 -n:显示匹配到的行在文件中的行数 -w:精确匹配,只匹配整个单词,而不是字符串的一部分 -o :只显示被模式匹配到的字符串 -A #:after, 后#行 -B #: before, 前#行 -C #:context, 前后各#行 -c:显示一个文件被匹配到几行 -E :使用扩展正则表达式

第14章 grep、sed、awk 正则表达式

1. 如何把 /etc/passwd 中用户uid 大于500 的行给打印出来?   awk -F ':' '$3>500' /etc/passwd2. awk中 NR,NF两个变量表示什么含义?awk -F ':' '{print $NR}' /etc/passwd  会打印出什么结果出来?    NR 表示行 : NF表示列 awk -F ':' '{print $NR}' /etc/passwd   会依次打印对应的行数的段,第一行打印第一段,第二行打印第二段... 到了最后就打印空行了 

正则表达式grep、egrep、fgrep

日期: 2015年08月27日 正则表达式: (RegularExpression,在代码中常简写为rex.regexp或RE) 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.通常被用来检索.替换符合某个模式的文本. 正则表达式是指一类字符书写的模式(pattern)这些字符成为元字符,元字符不表示其字面意义,而用于表示通配或控制功能. 正则表达式包括两类:基本正则表达式,扩展正则表达式 grep命令只支持基本正则表达式: egrep支持扩展正则表达式("e" 表