grep、正则表达式
-
grep:文本过滤(模式:pattern)工具
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行。
模式:由正则表达式字符及文本字符所编写的过滤条件。 -
正则表达式:由一类特殊字符及文本所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能。
正则表达式分为两类:基本正则表达式、扩展正则表达式 - grep工具支持基本正则表达式,egrep支持扩展正则表达式,fgrep快速搜索,不支持正则。
grep
-
grep [OPTIONS] PATTERN [FILE…]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]
–color==auto 高亮显示匹配到的字符串
-o 仅显示匹配到的字符串
-v 取反、显示不能被pattern匹配到的行
-i 忽略字符的大小写
-n 显示行号
-c 显示统计到的行数,等同于wc -l
-q 静默输出 只关心命令的执行结果 不关心输出结果
-e 指定多个条件,条件是或的关系
-w 匹配整个单词
-A 后几行
-B 前几行
-C 前后几行 查看日志 搜索关键字排查错误的时候
-E === egrep 支持扩展的正则表达式
-F === fgrep 不支持正则表达式
基本正则表达式
-
字符匹配
. :匹配任意单个字符
[] :匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
以上[]中的范围有以下几种表示方法:-
[:alnum:] 所有的数字和字符
[:alpha:] 所有的字母(不区分大小写)
[:lower:] 小写字母
[:upper:] 大写字母
[:space:] 专门匹配空格
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
[:digit:] 十进制数字 ;[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
-
[:alnum:] 所有的数字和字符
-
次数匹配
用于在要指定次数的字符后面,用于前面的字符要出现的次数:*:匹配前面的字符任意次,0 到无穷次
注:默认情况下,正则表达式是工作在贪婪模式下,能匹配多少就匹配多少
.* 任意字符出现任意次
a* a字符出现任意次
\? 匹配前面的字符出现0次或者1次
\+ 匹配前面的字符至少1次
\{n\} 前面的字符出现n次
\{m,n\}匹配前面的字符出现m到n次,m,n是一个范围
\{,n\}匹配前面的字符最多出现n
\{m,\}匹配前的字符至少出现m次
\ 转义符 -
位置锚定
^ 锚定行首,用于模式的最左侧
$ 锚定行尾,用于模式的最右侧^$ 匹配空行的
^[[:space:]] 行首是空白的字符
^[[:space:]]*$ 也是 空行
^a 以a开头的行
b$ 以b结束的行
^a.*b$ 以a开头 中间任意字符 以b结尾的行
^a.*[[:space:]]\{3\}.*b$ a开头跟任意字符,中间出现三次空格再跟任意字符 以b结尾的行
^# 以#开头的行\b \b 匹配词首和词尾 ;\bPATTERN\b
\< > 匹配词首和词尾 ;\<PATTERN\> -
分组 \(\)
将一个或多个字符捆绑在一起,当做一个整体进行处理,符号:()
(xy)*ab 表示xy这个整体可以出现任意次`
注:1、分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式:\1,\2,\3, …
2、后向引用:引用前面的分组括号中的模式所匹配的字符,而非模式本身 -
或者 \|
a \| b
C \| cat
扩展正则表达式
-
grep -E ‘PATTERN’ FILE…
egrep ‘PATTERN’ FILE… -
字符匹配
. :匹配任意单个字符
[] :匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
以上[]中的范围有以下几种表示方法:-
[:alnum:] 所有的数字和字符
[:alpha:] 所有的字母(不区分大小写)
[:lower:] 小写字母
[:upper:] 大写字母
[:space:] 专门匹配空格
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
[:digit:] 十进制数字 ;[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
-
[:alnum:] 所有的数字和字符
-
次数匹配
用于在要指定次数的字符后面,用于前面的字符要出现的次数:*:匹配前面的字符任意次,0 到无穷次
注:默认情况下,正则表达式是工作在贪婪模式下,能匹配多少就匹配多少
.* 任意字符出现任意次
? 匹配前面的字符出现0次或者1次
+ 匹配前面的字符至少1次
{n} 前面的字符出现n次
{m,n}匹配前面的字符出现m到n次,m,n是一个范围
{,n}匹配前面的字符最多出现n
{m,}匹配前的字符至少出现m次 -
位置锚定
^ 锚定行首,用于模式的最左侧
$ 锚定行尾,用于模式的最右侧^$ 匹配空行的
^[[:space:]] 行首是空白的字符
^[[:space:]]*$ 也是 空行
^a 以a开头的行
b$ 以b结束的行
^a.*b$ 以a开头 中间任意字符 以b结尾的行
^a.*[[:space:]]\{3\}.*b$ a开头跟任意字符,中间出现三次空格再跟任意字符 以b结尾的行
^# 以#开头的行\b \b 匹配词首和词尾 ;\bPATTERN\b
\< > 匹配词首和词尾 ;\<PATTERN\> -
分组 ()
将一个或多个字符捆绑在一起,当做一个整体进行处理,符号:()
(xy)*ab 表示xy这个整体可以出现任意次 -
或者 |
a | b
C | cat
原创文章,作者:s,如若转载,请注明出处:http://www.178linux.com/72661