grepegrep的用法

 

     grep: Global search REgular expression and Print out the line. 表示全局正则表达式版本。

     grep,egrepLinux下的文本搜索工具,这三个命令结合正则表达式能发挥强大的文本搜索功能。

     正则表达式:由一类字符书写的模式,其中有些字符不表示字符的字面意义,而是表示控制或通配的功能。

     正则表达式分为两种:基本正则表达式和扩展正则表达式。

     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一般结合扩展正则表达式使用,egrepgrep用法相近,在字符运用上稍有区别扩展正则表达式的功能和用法如下:

  字符匹配类

     .:表示匹配任意单个字符。

     []:表示匹配集合中的任意单个字符。

     如:[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 模式自左而右,引用第#个左括号以及与其匹配右括号之间的模式匹配到的内容。

  egrepgrep没有的功能:或者

       |:表示或者  a|b表示a或者b

                      ab|cd表示ab或者cd

    egrep命令的参数同grep(除-E外)。

   

 

命令运用:

1.       找出/etc/passwd文件中的一位数或两位数。

grep --color=auto '\<[[:digit:]]\{1,2\}\>'   /etc/passwd

wKiom1RokT3AqhsFAANHoGZurFI050.jpg

egrep --color=auto '\<[[:digit:]]{1,2}\>'  /etc/passwd

wKioL1RokdHxblKlAAMY1OYTCT4116.jpg

  1. 2.       找出用户名和默认shell相同的用户。

grep  '\<\([[:alnum:]]\+\)\>.*\1$'  /etc/passwd

wKiom1RokYWCAcOqAAC8S2VFRR0755.jpg

egrep  '\<([[:alnum:]]+)\>.*\1$'  /etc/passwd

 wKioL1RokifTIVSLAAC2HRBT9D8321.jpg

  1. 3.       找出/boot/grub/grub.conf中至少一个字符开头的行。

grep '^[[:space:]]\+.*'    /boot/grub/grub.conf

wKioL1RoknTDBFxhAAEup_ac6Jw465.jpg

egrep '^[[:space:]]+.*'   /boot/grub/grub.conf

wKiom1RokijiGyXoAAEvXmMPTZQ501.jpg

  1. 4.       找出/etc/rc.d/rc.sysinit中,以#开头,后面至少跟一个空白字符,而后又至少有一个非空白字符的行。

grep --color=auto '^#[[:space:]]\+[^[:space:]]\+'   /etc/rc.d/rc.sysinit

wKioL1RokuSyGrPFAAG2iCNI00M501.jpg

egrep --color=auto '^#[[:space:]]+[^[:space:]]+'   /etc/rc.d/rc.sysinit

wKioL1Rokw7xuwRnAAF1RhWc_9Y440.jpg