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次 分组:() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |