grep的用法与正则表达式

   在上一篇介绍完通配符后,这一篇来介绍正则表达式,正则表达式在linux日常维护中若能善用,可以大大提高我们的工作效率,但在我看来也是比较回收难懂的,在写这篇博客之前,我正在加班,面对一天的疲惫,再对着这些天书般的符号,此时只能用头大来形容我内心无比丰富的情感,好吧,先介绍grep的用法。


    grep默认支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,相当于grep -E。虽然一般情况下,基本正则表达式就够用了。特殊情况下,复杂的扩展表达式,可以简化字符串的匹配。



grep的选项:


-v: 反向选取,只显示不符合模式的行;

-o: 只显示被模式匹配到的字串,而不是整个行;

-i: 不区分字符大小写;


-A n:显示匹配到的行时,顺带显示其后面的n个行;

-A 2

-B n:前面的n行;

-C n:前后的n行;


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

grep -E = egrep



好了,介绍完grep的用法,我们正式来介绍正则表达式:

.匹配任意单个字符。



101958540.jpg

匹配rt之间有任意两个字符,可以匹配rootroatrrrt,但是不匹配rt



*:匹配紧挨在其前面的字符0次或者多次。

例如:grep 'ro*t' grep.txt。匹配rtrotroot 等等.

102316531.jpg



.*:表示任意字符。

^:锚定行首,

例如 查找以hello单词开头的行

102515796.jpg

$:锚定行尾


例如rd$ 表示搜寻以rd结尾的行

102607798.jpg

[]:匹配一系列字符中的一个。


例如:查找带h或者H字母的单词

102636280.jpg




[^]:匹配字符集以外的字符。例如:排除 h或者H的字母。



102729801.jpg


[n1-n2] 匹配一个范围中的一个字符。


例如:查找带数字的行

102955533.jpg


\{m,n\} :前面的字符至少重复m次,至多n


例如:查找ab出现至少1次,至多出现两次的行。

103138312.jpg


\{m\}表示至少匹配m

\{m\}  表示精确匹配m


\<  


例如:匹配以h开头的单词


103205707.jpg



\> 匹配单词结尾


例如:匹配以rd结尾的单词


104122768.jpg


\(\):分组引用;\1:表示第一组括号中的内容;\2:表示第二组括号中的内容;依次类推。例如:

grep--color=auto '^\(ab\).*\1'相当于 grep--color=auto '^\(ab\).*\(ab\)'


110114856.jpg





你可能感兴趣的:(linux,字符串,通配符,表达式)