grep和egrep的用法
grep: Global search REgular expression and Print out the line. 表示全局正则表达式版本。
grep,egrep是Linux下的文本搜索工具,这三个命令结合正则表达式能发挥强大的文本搜索功能。
正则表达式:由一类字符书写的模式,其中有些字符不表示字符的字面意义,而是表示控制或通配的功能。
正则表达式分为两种:基本正则表达式和扩展正则表达式。
grep一般结合基本正则表达式使用,基本正则表达式的功能和用法如下:
字符匹配类
.:表示匹配任意单个字符。
[]:表示匹配集合中的任意单个字符。
如:[0-9]表示任意单个数字,也可以写成[[:digit:]]。
[a-z]表示任意单个小写字母,也可以写成[[:lower:]]。
[A-Z]表示任意单个大写字母,也可以写成[[:upper:]]。
[a-zA-Z]表示任意单个大写字母或小写字母,也可以写成[[:alpha:]]。
[0-9a-zA-Z]表示任意单个字母或数字,也可以写成[[:alnum:]]。
[[:space:]]表示空格或者TAB。
[[:punct:]]表示任意单个标点。
[^]:匹配指定集合外的任意单个字符。
如:[^0-9]表示除数字外的单个字符,也可以写成[^[:digit:]]。
次数匹配类:用于对其前面紧邻的字符所能够出现的次数作出限定。
*:匹配其前面的字符任意次,0,1或多次;
\?:匹配其前面的字符0次或1次;
\+: 匹配其前面的字符出现至少1次;
\{m\}: 匹配其前面的字符m次;
\{m,n\}:匹配其前面的字符至少m次,至多n次;
.*: 匹配任意长度的任意字符
位置锚定类:
^: 行首锚定,写在模式的最左侧
$: 行尾锚定,写在模式的最右侧
^$: 空白行
\<: 词首锚定,出现在要查找的单词模式的左侧;\<char
\>:词尾锚定, 出现在要查找的单词模式的右侧;char\>
\<pattern\>: 匹配单词
分组:\(\) 后向引用:模式中,如果使用\(\)实现了分组,在某行文本的检查中,如果\(\)的模式匹配到了某内容,此内容后面的模式中可以被引用。
\1, \2, \3 模式自左而右,引用第#个左括号以及与其匹配右括号之间的模式匹配到的内容。
grep命令的参数:
-v: 反向选取,除匹配到的内容外都显示到标准输出。
-o: 仅显示匹配到内容,仅显示匹配到的字符,不显示所在行的其他文字。
-i: 忽略字符大小写。
-E: 使用扩展正则表达式,相当于egrep。
-A #:显示匹配到的内容所在行和下面两行。
-B #显示匹配到的内容所在行和上面两行。
-C #显示匹配到的内容所在行,上面两行和下面两行。
egrep一般结合扩展正则表达式使用,egrep和grep用法相近,在字符运用上稍有区别扩展正则表达式的功能和用法如下:
字符匹配类
.:表示匹配任意单个字符。
[]:表示匹配集合中的任意单个字符。
如:[0-9]表示任意单个数字,也可以写成[[:digit:]]。
[a-z]表示任意单个小写字母,也可以写成[[:lower:]]。
[A-Z]表示任意单个大写字母,也可以写成[[:upper:]]。
[a-zA-Z]表示任意单个大写字母或小写字母,也可以写成[[:alpha:]]。
[0-9a-zA-Z]表示任意单个字母或数字,也可以写成[[:alnum:]]。
[[:space:]]表示空格或者TAB。
[[:punct:]]表示任意单个标点。
[^]:匹配指定集合外的任意单个字符。
如:[^0-9]表示除数字外的单个字符,也可以写成[^[:digit:]]。
次数匹配类:用于对其前面紧邻的字符所能够出现的次数作出限定。
*:匹配其前面的字符任意次,0,1或多次;
?:匹配其前面的字符0次或1次;
+: 匹配其前面的字符出现至少1次;
{m}: 匹配其前面的字符m次;
{m,n}:匹配其前面的字符至少m次,至多n次;
.*: 匹配任意长度的任意字符
位置锚定类:
^: 行首锚定,写在模式的最左侧
$: 行尾锚定,写在模式的最右侧
^$: 空白行
\<: 词首锚定,出现在要查找的单词模式的左侧;\<char
\>:词尾锚定, 出现在要查找的单词模式的右侧;char\>
\<pattern\>: 匹配单词
分组:() 后向引用:模式中,如果使用\(\)实现了分组,在某行文本的检查中,如果\(\)的模式匹配到了某内容,此内容后面的模式中可以被引用。
\1, \2, \3 模式自左而右,引用第#个左括号以及与其匹配右括号之间的模式匹配到的内容。
egrep中grep没有的功能:或者
|:表示或者 如a|b表示a或者b。
ab|cd表示ab或者cd。
egrep命令的参数同grep(除-E外)。
命令运用:
1. 找出/etc/passwd文件中的一位数或两位数。
grep --color=auto ‘\<[[:digit:]]\{1,2\}\>‘ /etc/passwd
egrep --color=auto ‘\<[[:digit:]]{1,2}\>‘ /etc/passwd
- 2. 找出用户名和默认shell相同的用户。
grep ‘\<\([[:alnum:]]\+\)\>.*\1$‘ /etc/passwd
egrep ‘\<([[:alnum:]]+)\>.*\1$‘ /etc/passwd
- 3. 找出/boot/grub/grub.conf中至少一个字符开头的行。
grep ‘^[[:space:]]\+.*‘ /boot/grub/grub.conf
egrep ‘^[[:space:]]+.*‘ /boot/grub/grub.conf
- 4. 找出/etc/rc.d/rc.sysinit中,以#开头,后面至少跟一个空白字符,而后又至少有一个非空白字符的行。
grep --color=auto ‘^#[[:space:]]\+[^[:space:]]\+‘ /etc/rc.d/rc.sysinit
egrep --color=auto ‘^#[[:space:]]+[^[:space:]]+‘ /etc/rc.d/rc.sysinit