微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

grep是一个文本检索工具,号称linux文本处理三大剑客之一,通常会结合正则表达式使用,支持基本正则表达式和扩展的正则表达式,功能很强大,给我们搜索文本带来了很大的便利,认情况下,它是贪婪模式,能匹配多长就匹配多长,会将匹配到的整行显示出来。另外两大剑客:sed、awk。

grep常用选项:

grep -i:忽略大小写

[root@localhost ~]# grep -i tom /etc/passwd

tom:x:506:506::/home/tom:/bin/bash

Tom:x:507:507::/home/Tom:/bin/bash

grep -o:仅显示匹配到的文本

[root@localhost ~]# grep -o root /etc/passwd

root

root

grep --color:对匹配到的文本进行高亮显示

[root@localhost ~]# grep --color=auto tom /etc/passwd

tom:x:506:506::/home/tom:/bin/bash

grep -v:显示匹配文本以外的文本

[root@localhost ~]# grep -v tom /etc/passwd |tail -2

named:x:25:25:Named:/var/named:/sbin/nologin

Tom:x:507:507::/home/Tom:/bin/bash

grep -e:表示逻辑关系“或”

[root@localhost ~]# grep -e tom -e Tom /etc/passwd

tom:x:506:506::/home/tom:/bin/bash

Tom:x:507:507::/home/Tom:/bin/bash

grep -q:静模式,无论匹配到还是没有匹配到文本都不显示

[root@localhost ~]# grep -q tom /etc/passwd

[root@localhost ~]#

grep -A #:显示模式匹配到的文本,并显示后#行

[root@localhost ~]# grep -A 1 named /etc/passwd

named:x:25:25:Named:/var/named:/sbin/nologin

tom:x:506:506::/home/tom:/bin/bash

grep -B #:显示模式匹配到的文本,并显示前#行

[root@localhost ~]# grep -B 1 named /etc/passwd

mage:x:505:505::/home/mage:/bin/bash

named:x:25:25:Named:/var/named:/sbin/nologin

grep -C #:显示模式匹配到的文本,并显示前后各#行

[root@localhost ~]# grep -C 1 named /etc/passwd

mage:x:505:505::/home/mage:/bin/bash

named:x:25:25:Named:/var/named:/sbin/nologin

tom:x:506:506::/home/tom:/bin/bash

grep -E:支持扩展的正则表达式

grep基于模式匹配,支持基本的正则表达式,可用-E选项支持扩展的正则表达式,相当于egrep。

正则表达式有很多元字符组成,有基本的正则表达式BRE和扩展的正则表达式ERE。

基本的正则表达式元字符:BRE

字符匹配:

.:匹配任意单个字符

【】:匹配范围内任意单个字符

【^】:匹配范围外任意单个字符tt

【:digit:】:::所有数字【:alnum:】:所有数字和字母

【:lower:】:所有小写字母【:space:】:空白字符

【:punct:】:所有标点符号【:alpha:】:所有字母

【:upper:】:所有大写字母

[root@localhost ~]# grep T.m /etc/passwd

Tom:x:507:507::/home/Tom:/bin/bash

[root@localhost ~]# grep [Tt] /etc/passwd |tail -2

tom:x:506:506::/home/tom:/bin/bash

Tom:x:507:507::/home/Tom:/bin/bash

次数匹配:

*:匹配前面字符任意次

.*:匹配任意长度任意字符

\+:匹配前面字符至少一次

\?:匹配前面字符0次或1次

\{m\}:匹配前面字符m次

\{m,n\}:匹配前面字符至少m次,至多n次

\{m,\}:匹配前面字符至少m次

\{,n\}:匹配前面字符至多n次

[root@localhost ~]# grep "x*y" hadop

xxy

xy

yy 匹配前面的x任意次,0次也匹配

[root@localhost ~]# grep "x\+y" hadop

xxy

xy匹配前面的x至少一次


[root@localhost ~]# grep "x\{2\}y" hadop

xxy 匹配前面的x两次,精确匹配


位置锚定:

^:行首锚定

$:行尾锚定

^$:空行

^PATTERN$:用于模式匹配整行

^*$:非空白行

\<或\b:词首锚定

\>或\b:词尾锚定

\<PATTERN\>:锚定整个单词

[root@localhost ~]# grep "^root" --color=auto /etc/passwd

root:x:0:0:root:/root:/bin/bash

[root@localhost ~]# grep "/sbin/nologin$" /etc/passwd |head -2

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

分组:

\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,分组匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量命名为:\1,\2,\3....可以进行后向引用,引用前面分组中模式所匹配到的字符

\1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符.

\(string1\+\(string2\)*\)

\1:string1\+\(string2\)*

\2:string2

[root@localhost ~]# grep "\(r..t\).*\1" --color=auto /etc/passwd

root:x:0:0:root:/root:/bin/bash

前面匹配到root,记录在变量\1中,在进行后面引用,在本行中,在有root出现才会被模式匹配


[root@localhost ~]# grep "\(r..t\)" --color=auto /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

如果只进行分组,不进行后向引用,结果就成这样,只要被分组匹配到都会显示出来


扩展正则表达式元字符:ERE

扩展正则表达式元字符和基本正则表达式相比,更简洁,字符匹配、位置锚定,元字符都一样。只有次数匹配和分组元字符稍有偏差。

次数匹配:

.*{}:匹配任意长度任意字符

+:匹配前面字符至少一次

?:匹配前面字符0次或1次

{m}:匹配前面字符m次

{m,n}:匹配前面字符至少m次,至多n次

{,n}:匹配前面字符至多n次

{m,}:匹配前面字符至少m次

分组:()

原文地址:https://www.jb51.cc/regex/359122.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐