在上一篇介绍完通配符后,这一篇来介绍正则表达式,正则表达式在linux日常维护中若能善用,可以大大提高我们的工作效率,但在我看来也是比较回收难懂的,在写这篇博客之前,我正在加班,面对一天的疲惫,再对着这些天书般的符号,此时只能用“头大”来形容我内心无比丰富的情感,好吧,先介绍grep的用法。
grep默认支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,相当于grep -E。虽然一般情况下,基本正则表达式就够用了。特殊情况下,复杂的扩展表达式,可以简化字符串的匹配。
grep的选项:
-v: 反向选取,只显示不符合模式的行;
-o: 只显示被模式匹配到的字串,而不是整个行;
-i: 不区分字符大小写;
-A 2
-B n:前面的n行;
-C n:前后的n行;
-E: 使用扩展的正则表达式
grep -E = egrep
好了,介绍完grep的用法,我们正式来介绍正则表达式:
.:匹配任意单个字符。
匹配r和t之间有任意两个字符,可以匹配root,roat,rrrt,但是不匹配rt。
*:匹配紧挨在其前面的字符0次或者多次。
例如:grep 'ro*t' grep.txt。匹配rt,rot,root 等等.
.*::表示任意字符。
^:锚定行首,
例如 查找以hello单词开头的行
$:锚定行尾
例如rd$ 表示搜寻以rd结尾的行
[]:匹配一系列字符中的一个。
例如:查找带h或者H字母的单词
[^]:匹配字符集以外的字符。例如:排除 h或者H的字母。
[n1-n2] 匹配一个范围中的一个字符。
例如:查找带数字的行
\{m,n\} :前面的字符至少重复m次,至多n次
例如:查找ab出现至少1次,至多出现两次的行。
\{m,\}表示至少匹配m次
\{m\} 表示精确匹配m次
\<
例如:匹配以h开头的单词
\> 匹配单词结尾
例如:匹配以rd结尾的单词
\(\):分组引用;\1:表示第一组括号中的内容;\2:表示第二组括号中的内容;依次类推。例如:
grep--color=auto '^\(ab\).*\1'相当于 grep--color=auto '^\(ab\).*\(ab\)'