grep命令

作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行。

模式::由正则表达式字符及文本字符所编写的过滤条件

语法:grep [OPTIONS] PATTERN [FILE...]

常用选项:

--color=auto     #对匹配到的文本着色显示 ,系统默认将grep别名设置为:grep='grep --color=auto'

-m #        #只显示匹配到的#行

-v        #显示不被pattern匹配到的行

-i        #忽略字符大小写

-n        #显示匹配的行号

-c        #统计匹配的行数

-o        #仅显示匹配到的字符串

-q        #静默模式,不输出任何信息

-A        #显示匹配到行的后几行

-B        #显示匹配到行的前几行

-C        #显示匹配到的行的前后几行

-e        #实现多个选项间的逻辑or关系

-w       #匹配整个单词

-E         #使用ERE

-F       #相当于fgrep,不支持正则表达式

-f           #file 根据模式文件处理

正则表达式

REGEXP:由一类特殊字符及文本字符所编写的模式, 其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能

分为两大类,基本的正则表达式和扩展的正则表达式,二者元字符的区别如下:

1、基本正则表达式元字符

^  #如果在[]外则表示以某个字符开头,如果在[]内,则表示除某些字符以外

$  #表示以某个字符结尾

.   #表示匹配任意一个字符

*   #表示匹配前面字符任意次

[]   #表示匹配括号内的多个字符中的任意一个

.*   #表示匹配所有

[^]  #表示匹配除括号内以外的所有字符

^$  #表示匹配空行信息

\     #将含有特殊含义的字符转义为原字符的含义

2、扩展的正则表达式

+    #表示前面字符出现一次或一次以上

?   #表示前面字符出现0次或一次以上

|   #表示或者的关系,匹配多个信息

()    #匹配一个整体信息,可以进行后项引用

{}    #定义前面的字符出现的次数

除此之外正则表达式也支持下面的元字符:

[:alnum:] 字母和数字

[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z

[:lower:] 小写字母

[:upper:] 大写字母

[:blank:] 空白字符(空格和制表符)

[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)

[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)

[:digit:] 十进制数字 [:xdigit:]十六进制数字

[:graph:] 可打印的非空白字符

[:print:] 可打印字符

[:punct:] 标点符号

一、grep常用选项

举例1:grep查找root关键字,且显示匹配到的第一行

观察以上三条命令的区别,不加-m选项,则默认显示匹配到的所有的行,加了-m选项则只显示-m指定的行数

举例2:显示文档中除shenzhen以外的所有的行

通过以上结果可知,当加上-v选项后,shenzhen所在的那行不再被显示

举例3:不区分大小写查找文档中的shenzhen字符

当加上-i选项后,grep查找时,不区分关键字的大小写

举例4:查找shenzhen字符并显示出字符在文档中的行数

加上-n选项后,会在关键词所在行的行首显示出关键词在文档中的行数

举例5:统计文档中含有shenzhen字符的所有行的数量

加上-c选项后,会统计包含shenzhen字符的行数

举例6:仅显示匹配到的字符

加上-o选项不会显示所匹配到的行,仅显示匹配到的字符

举例7:静默显示,即不输出任何信息

在查询root字符时,不会 输出任何结果,但是会有执行结果

举例8:显示匹配到的行及其后面那一行

加上-A(after)选项,并指定行数为1,则显示的结果为匹配到的行及其后面哪一行

举例9:显示匹配到的行及其前面哪一行

使用-B(before)选项,并指定行数为1,则显示匹配到的行及其前一行

举例10:显示匹配到的行及其前后1行

使用-C选项并指明其行数为1,则显示其匹配到的行以及前后各一行

举例11:匹配多个选项

使用-e选项能实现匹配shenzhen或者longhua的字符的行,并显示到屏幕

举例12:精确匹配到某个单词

不加-w选项,grep默认会显示出所有包含字符的行,加上-w则表示显示匹配到这个单词的行

举例13:通过扩展的正则匹配

由于?只支持扩展的正则表达式,所以需要在前面加上-E选项才能匹配到关键字符

二、grep位置锚定用法:

常用的表达式:

^  #行首锚定,用于模式的最左侧

$  #行尾锚定,用于模式的最右侧

^<pattern>$  #用于模式匹配整行

^$  #匹配空行

^[[:space:]]*$  #匹配空白行

\<或者\b  #词首锚定,用于单词模式的最左侧

\>或者\b  #词尾锚定,用于单词模式的最右侧

\<pattern\>  #匹配整个单词

举例:查找/etc/passwd中以root开头的行

在查找的字符前加^,只显示以该字符开头的行

举例2:查找/etc/passwd中以nologin结尾的行

在要匹配的字符后面加$,则grep会查找出以该字符结尾的所有行

举例3:查找出文档内容中以大写Z开头,并以520结尾的行

举例4:查找出文档中的空行

^$以这两个字符作为关键字符去匹配,意味着此行内没有任何内容,即空行

举例5:找出文档中空白行

从上图可知,^$匹配不了空白行,^[[:space:]]*$的含义为,以空白行开头且中间有任意个空白字符的行

举例6:查找文档中re在词尾的行

此处需要注意的是,用引号将模式给引起来,否则不生效

三、grep匹配次数

\{n\}  #前面的字符重复n次

\{n,\}    #前面的字符重复n次以上

\{m,n\} #前面的字符重复m次以上n次以下

举例1:匹配字符r后面的o出现3次的行

注意观察,标红的字符为匹配到的字符,当连续出现3个o则被匹配

举例2:匹配字符r后面的o出现最少3次,最多4次的行

观察此图和上图的区别,可知上图始终只能标识3个o,此图中则标识3个和4个o

举例3:匹配字符r后的o至少3次以上

举例4:匹配字符r后面的o最多出现3次

上图中,匹配o的次数包括0次,1次,2次,3次

四、分组及后向引用

\(\)将一个或多个字符捆绑在一起,当作一个整体处理,分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部变量中吗,这些变量的命名方式为:\1,\2,\3……

举例:利用grep分组匹配字符

以上将root和admin分别放在\(\)中,则将root分成组1,admin分成组2,后面再次出现重复字符时,可以通过\1和、2代替

五、或者

可以用符号\| 来表示匹配中的或者选项

举例:过滤出文档中Cat或者cat

在上图中\|则表示的是逻辑中的或的意思

正则表达式grep命令的更多相关文章

  1. linux:正则表达式grep命令

    基本语法一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串. 一.选择:| |   竖直分隔符表示选择,例如"boy|girl"可 ...

  2. NO22 Linux正则表达式--grep命令常用参数

    Linux正则表达式:  一.基础正则第一波字符说明: 示例: 二.基础正则第二波字符说明:  三.基础正则第二波字符说明: 示例:  grep:一般常用参数 示例:+和*  ?和.:  |:  () ...

  3. Linux正则表达式grep与egrep

    grep -io "http:/=[A-Z0-9]\{16\}" ./wsxf.txt >wsxf_urls.txt Linux正则表达式grep与egrep 正则表达式:它 ...

  4. Linux grep命令和正则表达式

    介绍 grep是一个功能强大的文本搜索命令,可以用它来搜索某个文件中是否包含指定的搜索内容,它可以利用正则表达式来做复杂的筛选操作,它还可以为其它命令传输给管道的筛选,比如我们常用到的分析单个进程的操 ...

  5. 快速掌握grep命令及正则表达式

    Linux系统自带了支持拓展正则表达式的 GNU 版本 grep 工具,所有的Linux发行版中均默认安装grep ,grep 命令被用来检索一台服务器或工作站上任何位置的文本信息,如何在 Linux ...

  6. 正则表达式2——grep命令

    grep是Global search Regular Expression and Print out the line的简称. 1. grep命令基本用法 命令格式: grep [选项][模式][文 ...

  7. Linux grep 命令中的正则表达式详解

    在 Linux .类 Unix 系统中我该如何使用 Grep 命令的正则表达式呢? Linux 附带有 GNU grep 命令工具,它支持扩展正则表达式(extended regular expres ...

  8. grep命令及基本正则表达式

    grep命令是Linux系统中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功 ...

  9. Linux - 结合正则表达式使用grep命令

    Grep with Regular Expression grep命令基本用法 grep [-acinv] [--color=auto] [-A n] [-B n] '搜寻字符串' 文件名参数说明: ...

随机推荐

  1. mysql多表连接和子查询

    文章实例的数据表,来自上一篇博客<mysql简单查询>:http://blog.csdn.net/zuiwuyuan/article/details/39349611 MYSQL的多表连接 ...

  2. CentOS 安装 semanage 命令

    CentOS 安装 semanage 命令 在服务器上运行: [root@ca1 ~]# yum install policycoreutils-python vim /etc/selinux/con ...

  3. Python--day62--删除出版社

    删除成出版社关键代码:

  4. Python--day43--增删改查补充和limit以及order by

    增删改查补充: 增: 删和改: 查: 其他: limit:(具有分页的功能) 分页:

  5. Python--day61--Django项目配置相关

    static文件查找:

  6. fatal: Not a git repository (or any of the parent directories)

    当从github.com上面下载下了Firmware后,无意中删除了Firmware目录下的.git文件夹,再去编译就会出现:   fatal: Not a git repository (or an ...

  7. 2018-2-13-wpf-使用-Dispatcher.Invoke-冻结窗口

    title author date CreateTime categories wpf 使用 Dispatcher.Invoke 冻结窗口 lindexi 2018-2-13 17:23:3 +080 ...

  8. css3动画@keyframes示例

    .active { animation: chuiziza 0.5s ease 1 forwards; } .feijindan { display: block; animation: fei 2s ...

  9. 判断是否是ie浏览器或者edge浏览器,引入特定的css

    判断是否是ie浏览器或者edge浏览器,引入特定的css 我本来要用ie浏览器专有的条件注释语句来引入,但是发现都没有效果,网上有说ie10之后的浏览器取消了条件语句,反正我是只要是IE都没有试出效果 ...

  10. dotnet 获取指定进程的输入命令行

    本文告诉大家如何在 dotnet 获取指定的进程的命令行参数 很多的程序在启动的时候都需要传入参数,那么如何拿到这些程序传入的参数? 我找到两个方法,一个需要引用 C++ 库支持 x86 和 x64 ...