正则表达式(basic regexp):包含了很多的元字符,元字符表达的不是本身的意义,而是某种通配的或是次数匹配的其他意义。
grep仅支持基本正则表达式
匹配字符的
. :匹配任意单个字符
grep "r..t" /etc/passwd
[]:指定范围内的任意单个字符
[Cc]at表示匹配以C或是c开头的at
[^]表示取反
[^ab]表示匹配除了ab以外的其他单个字符
指定字符集的:
[[:upper:]]=[A-Z];[[:lower:]]=[a-z];[[:digit:]]=[0-9] [[:alpha:]]=[a-zA-Z] [[:alnum:]]=[a-zA-Z0-9]
[[:space:]]表示空格 [:punct:]表示所有的标点符号
匹配次数
* :匹配其前面的字符任意次
ab*c:abc abbc ac
.*:匹配以字符开头的后面任意长度的任意字符,也称为贪婪模式
grep --color "r.*t" /etc/passwd
X\{m,n\} 表示x至少出现m次,至多出现n次
X\{m,\} 表示x至少出现m次,至多不限
x\{0,n\} 表示至多出现n次
例:查看/etc/passwd中至少包含了一个空白字符的行
grep “[[:space:]]\{1,\}” /etc/passwd
?:匹配其前面的字符0次或1次
ab?c的匹配结果是abc,ac
锚定符:
行的锚定符
^:锚定行首
^r..t 表示以行首必须出现r..t
$:锚定行尾
^$:锚定空白行
例:找出/etc/inittab中的空白行
grep “^$” /etc/inittab
词的锚定符
\<:锚定词首 也可以用\b来锚定词首
\< r...t
\>:锚定词尾 也可以用\b来锚定词尾
r..t\>
词组引用:
\(\):表示对字符进行分组,然后用\1,\2进行后向引用
\(\(\)\):\1表示引用第一个括号中的内容,\2表示引用第二个括号中的内容
例子:
1.he love his lover
grep “\(l..e\).*\1r” ab.txt
找出/etc/inittab下以数字开头和以开头数字结尾的行
grep –color “^\([0-9]\).*\1$” /etc/inittab
这个例子中的^字符表示锚定行首,$表示锚定行尾。[0-9]表示数字
\1则表示引用行首的数字;.*则表示任意字符
查找当前系统上名字为user,名字后跟数字的用户的相关信息
grep “^user[0-9]\{1,\}\>” /etc/passwd
grep --color“^#[[:space:]]\{1,\}[^[:space:]]” /etc/inittab
grep 选项
-v:对结果取反
例:找出/etc/inittab中的非空白行
grep –v “^$” /etc/inittab
-i:忽略大小写
查找/etc/inittab下的大写c和小写c
grep –i “c”/etc/inittab
-o:仅显示匹配到的字符串
-E:支持扩展正则表达式
-A n:表示显示匹配到的下面的n行
-B n:表示显示匹配到的上面的n行
-C n:表示显示匹配到的上下n行
例:取出当前系统上以eth开头的网路设备的ip地址
ifconfig | grep –A 1 “eth” | grep –o “addr:[0-9]\{1,\}”
扩展的正则表达式(extended regexp)
扩展正则表达式基本上和正则表达式的元字符都大同小异,除了下面的元字符稍微有些不一样,其他的用法都是一样的,这里就不再说明了。
正则表达式中的 扩展正则表达式
\(\) ()另外还可以用作分组
\{m,n\} {m,n}
做次数匹配
+:次数匹配,匹配其前的字符至少一次
下面是用正则表达式和扩展正则表达式表示/ect/inittab中的以#开头的包含至少一个空白字符,和非空白字符的行
grep --color“^#[[:space:]]\{1,\}[^[:space:]]” /etc/inittab
grep –color –E “^#[[:space:]]+[^[:space:]]” /etc/inittab
|:或者 a|b表示a或b都行, (C|c)at
egrep命令和grep -E 表示后面是扩展正则表达式的元字符匹配
例:取出ifconfig命令结果中的1-255之间的位数
ifconfig | grep -E
“\<([1-9]|[1-9][0-9])|1[0-9]{2}|2[0-5]{2})\>”
在这个例子中\<和\>是锚定词首和词尾就是这个词开头和结尾都必须是数字,|表示扩展正则表达式中的或者 ,()表示分组,第一个[1-9]表示一位数;[1-9][0-9]表示两位数;1[0-9]{2}表示三位数,其中{2}表示匹配[0-9]两次;2[0-5]{2}表示小于255的三位数。
本文转自 沐木小布丁 51CTO博客,原文链接:http://blog.51cto.com/sxhxt/905814