grepegrep及相应的正则表达式用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grepegrep及相应的正则表达式用法相关的知识,希望对你有一定的参考价值。


    Linux系统中grep,egrep命令是一种强大的文本搜索工具,它们能使用正则表达式和扩展正则表达式搜索文本,并把匹配到的行打印出来。


  1. 搜寻特定字符串"the"  注: n为显示行号

      # grep -n ‘the‘ regular_express.txt


2.使用-v选项反向搜寻特定字符串"the"

      # grep -vn ‘the‘ regular_express.txt


3.匹配大小写"the"的这个字符串,使用-i选项

      # grep -in ‘the‘ regular_express.txt


4.[] 表示匹配"[]"范围内的字符串

     搜索test或tast这两个单词时,发现他们有共同的‘t?st‘,所以可以这么搜寻

     # grep -n ‘t[ae]st‘ regular_express.tx

  注: 大写英文/小写英文/数字 可以使用 [a-z]/[A-Z]/[0-9]等方式来书写,也可以写在一起

  [a-zA-Z0-9]表示要求字符串是数字以及英文

     如果我们要取得有数字的那行,则:

     # grep -n ‘[0-9]‘ regular_express.txt

    也可以用

    [[:lower:]]  代替a-z

    [[:digit:]]  代替0-9

    [[:upper:]]:所有大写字母;

    [[:lower:]]:所有小写字母;

    [[:digit:]]:所有的数字;

    [[:alpha:]]:所有字母;

    [[:space:]]:空白字符;

    [[:punct:]]:标点符号;

    例:# grep -n ‘[^[:lower:]]oo‘ regular_express.txt

        # grep -n ‘[[:digit:]]‘ regular_express.txt等


5.[^] 表示匹配"[]"范围之外的字符串,例如[^0-9]表示非数字字符,[^A-Z]表示非大写字符范围

        如果我们要取得没有数字的那行,则:

        # grep -n ‘[0-9]‘ regular_express.txt


6.^word表示匹配的字符串(word)在行首

       显示行首为‘the‘的字符串

       # grep -n ‘^the‘ regular_express.txt

       显示行首是小写字符

       # grep -n ‘^[a-z]‘ regular_express.txt 


7.word$表示匹配的字符串(word)在行尾

      显示行尾为点 . 的那一行

      # grep -n ‘\.$‘ regular_express.txt

      显示空白行

      # grep -n ‘^$‘ regular_express.txt


8.  .号表示匹配1个任意字符

      找出g??d字符串,起头g结束d的四个字符串

      # grep -n ‘g..d‘ regular_express.txt


9. *表示匹配0到无穷多个(正则表达式)前一个字符

      "goo*g"代表gog,goog,gooog...等

      # grep -n ‘goo*g‘ regular_express.txt


10. \?表示匹配前面的字符0次或1次

        匹配o字符0次或一次

        # grep -n ro\?t regular_express.txt


11. \+匹配前面的字符至少一次

        匹配至少含有一个o字符的字符串

        grep -n ro\+t regular_express.txt


    注:   .号代表任意字符, .*则就代表空字符或者一个到N个任意字符

          找出含两个g中间含有任意个字符的字符串

          # grep -n ‘g.*g‘ regular_express.txt


    \表示转义字符,在特殊字符前加\会将原本的特殊字符意义去除

    注:{}因为在shell里有特殊意义,所以需要加转意符\来让其失去意义


 12. \{m,n\}表示找出n到m个(正则表达式)前一个字符

          找出含两个o的字符串

          # grep -n ‘o\{2\}‘  regular_express.txt

          找出g后含2到5个o然后以g结尾的字符串

          # grep -n ‘go\{2,5\}g‘  regular_express.txt


13. \{n,\}表示n个以上的前一个RE字符

          找出g后含2以上的o然后以g结尾的字符串

          # grep -n ‘go\{2,\}g‘  regular_express.txt


 14. \<或\b表示词首锚定 

          找出以“ro”字符串位于单词首的字符串

          # grep -n "ro\<" regular_express.txt  

    

 15. \>或\b 表示词尾锚定

          找出以“ro”字符串位于单词尾的字符串

          # grep -n "\>ro" regular_express.txt


 egrep支持使用扩展正则表达式,与grep用法基本相同,区别在于egrep除了词尾锚定和词尾锚定

 时"<"">"符号要用"\"来转意,其它符号则不用,

范例:

 1. + 表示重复一个或一个以上的前一个RE字符

      范例:egrep ‘go+d‘ regular_express.txt

      表示搜寻(god)(good)(goood)...等等字符串,o+代表[一个以上的o]

 2. ? 表示重复零个或一个的前一个RE字符

      范例:egrep ‘go?d‘ regular_express.txt

      表示搜寻(gd)(god)字符串,o?代表[空的或1个o]


 3. () 表示找出群组字符串

       范例:egrep ‘g(la|oo)d‘ regular_express.txt

       表示搜寻(glad)或(good)字符串


 4. ()+ 表示找出多个重复群组的判别

       范例: echo ‘AxyzxyzxyzxyzxyzC‘|egrep ‘A(xyz)+C‘

       表示搜寻开头是A结尾是C,中间有一个以上的‘xyz‘字符串


其余用法不在详细举例,可模仿grep用法:


范围匹配:

    .号表示匹配任意单个字符

    [ ]:匹配范围内的任意单个字符

   [^ ]:匹配范围外的任意单个字符

次数匹配:

    *:匹配任意次

    ?:匹配0次或1次

    +:匹配1次或多次

    {m}:匹配匹配m次

    {m,n}:匹配至少m次,至多n次

    {0,n}:匹配至少0次至多无限次

    {m,}:匹配至少m次

位置匹配:

    ^ 表示行首锚定

    $ 表示行尾锚定

    \<或\b 表示词首锚定

    \>或\b 表示词尾锚定

本文出自 “Linux” 博客,请务必保留此出处http://wyg11.blog.51cto.com/11253863/1750068

以上是关于grepegrep及相应的正则表达式用法的主要内容,如果未能解决你的问题,请参考以下文章

grepegrep及相应的正则表达式和用法

grepegrep及相应的正则表达式和用法

grepegrep及相应的正则表达式用法

linux下grepegrep及相应的正则表达式和用法

grepegrep及相应的正则表达式和用法

Linux中的grepegrep及相应的正则表达式和用法