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

正则表达式 grep

grep全称是:Global search Regular Expression and Printing全局搜索正则表达式并显示出来

使用正则表达式来描述选择条件。

取行选择;选取行的筛选条件,给定选取条件,只显示符合条件的行,或者只显示不符合条件的行。

对于类似的操作有三个命令:grep; egrep; fgrep

grep:支持基本正则表达式;

egrep:扩展正则表达式;

fgrep:不支持正则表达式元字符,搜索字符串的速度快;


正则表达式是一类字符所书写的模式(pattern)
元字符:不表示字符本身的意义,而用于额外功能性的描述;

使用一堆元字符,不表示元字符本身的意义,而表示元字符用于描述功能的,而这个描述出来的功能功能性描述所书写的表达式,我们把它称之为正则表达式。

使用一类不表示本身的元字符,组合其它字符所描述出来的能够匹配符合条件或者是符合模式字符的表达式称为正则表达式的模式。


方法:grep [options] 'pattern' FILE 意思是说从这个文件中找出符合指写模式的行并显示出来。'pattern'用来描述搜索条件。

例:显示用户属性信息中包涵root字符的行
#grep ‘root’ /etc/passwd

wKioL1NzdKmRhBqPAABZkohVJKo358.jpg


也可以将查到的结果高亮显示;
#grep --color=auto ‘root’ /etc/passwd

wKiom1NzdU6jtXk6AABlEBPvXoM025.jpg


基本正则表达式:贪婪模式(尽可能长地去匹配符合模式的内容
^:锚定行首的符合条件的内容用法格式“^pattern”;

如:grep --color=auto ‘^root’ /etc/passwd

wKioL1NzcGbyn0OYAABiZIWoqOo137.jpg



$:锚定行尾的符合条件的内容用法格式“pattern$”;
如:grep --color=auto ‘sh$’ /etc/passwd

wKiom1NzcSjQGO3TAAB9y6u6pP0624.jpg


^ pattern$:找出其自成一行的行
^$:找出空白行
如:#grep ‘^$’ /etc/rc.d/rc.sysinit
也可以传送给管道就能查出有多少个空白行
如:#grep ‘^$’ /etc/rc.d/rc.sysinit | wc -l
.:匹配任意单个字符
*:匹配紧挨在其前面的字符任意次;
如:a*b: ab,aab,acb,b,a
#grep --color=auto “a*b” grep.txt

wKioL1Nzct2iGoupAABq-knGsHk782.jpg


.*: 匹配任意长度的任意字符
如:#grep --color=auto ‘r.*h’ /etc/passwd

wKioL1NzcTCiVqOPAAEmYZbKmBo998.jpg


[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[a-z],[A-Z],[0-9]
[:lower:] a-z
[:upper:] A-Z
[:digit:] 所有数字
[:alpha:] 所有大小写字母
[:alnum:] 所有大小写字母与数字
[:space:] 所有空白
[:punct:] 所有标点
如:#grep --color=auto 'r[0-9].*h' /etc/passwd
\?:匹配紧挨在其前面的字符0次或1次;
a\?b :ab,b
如:#grep --color=auto "a\?b" grep.txt

wKiom1NzcYKBVMP-AABa_FsC808845.jpg


\{m,n\}:匹配其前面的字符至少m次,至多n次;
\{0,n\}:至多n次;0-n次;
\{m,\}:至少m次
\{m\}:精确匹配m次
如:a\{1,3}b: b,ab,aaab,aaaaaab,acb
只有ab,aaab,匹配。


注:写grep时,模式中间没有元字符加不加引号都行;但是不加引号时,无论里面写的是什么,包括元字符,它也只将其理解成字符本身的意义,不会将它解晰为模式的。所以一定要加引号,单双引号都可以。如果说模式中使用变量时,则要使用双引号。

\<:锚定词首,用法格式:\<pattern或者\b:\bpattern
\>:锚定词尾,用法格式:pattern\>或者\b:pattern\b
\<pattern\>:锚定单词
\(\):分组,用法格式:\(pattern\)
如:\(ab\)\{1,3}:ab,abb,abab,ababab

wKioL1N0s4miEwRBAABflMzprp0078.jpg


ab任意字符ab:ab.*ab

wKiom1N0s7OBbJjwAABSIiEp9k4107.jpg


a.b任意字符a.b:\(a.b\).*\1


wKiom1N0s7CiG_ESAABR1TVz4jA990.jpg

wKiom1N0s7SByS2TAACersjCFW0486.jpg



如:找出下面以l开头中间跟了两个字符以e结尾,后面引用前面的内容再在后面以r结尾的内容

He like his liker
He love his liker
She love her lover
She like her lover

wKiom1N0t_aRncgEAACbizqP-4A637.jpg



grep的选项:
--color=auto
export GREP_COLOR='01;36'
-v: 反向选取,只显示不符合模式的行;
-o: 只显示被模式匹配到的字串,而不是整个行;
-i: 不区分字符大小写;

-A #:显示匹配到的行时,顺带显示其后面的#(#号代表数字)个行;
-A 2(表示后面的两行都显示出来)
-B #:前面的#行;
-C #:前后的#行;

-E: 使用扩展的正则表达式 grep -E = egrep

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

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

相关推荐