Linux grep篇

借鉴来源:https://www.cnblogs.com/flyor/p/6411140.html

Linux中grep命令的用法

  作为Linux中最常用的三大文本(awk,sed,grep)处理工具之一,掌握好其用法是很有必要的。

  首先谈一下grep常用格式为:grep [选项] "模式"  文件

  grep家族总共有三个:grep,egrep,fgrep

  常用选项

  -E: 开启扩展(Extend)正则表达式

    -i  :忽略大小写(ignore case)

    -v :反过来(invert),只打印没有匹配到的,而匹配到的反而不打印

    -n :显示行号

    -w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜索的只是like,就可以使用-w选项来避免匹配liker

    -c  :显示总共有多少行被匹配到了,而不是显示被匹配的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到

    -o  :只显示被模式匹配到的字符串

    --color :将匹配到的内容以颜色高亮显示

   -A  n :显示匹配到的字符串所在的行以及其后N行,after

   -B  n :显示匹配到的字符串所在的行以及其前N行,before

   -C  n :显示匹配到的字符串所在的行及其前后各N行,context

 

 

 

 

 

 

 以上就是各个参数的演示了。应该清楚明了。

 模式部分

  1、直接输入要匹配的字符串,这个可以用fgrep(fast grep)代替来提高查找速度,比如我要匹配一下hello.c文件中printf的个数:fgrep  -c "printf" hello.c

  2、使用基本正则表达式,下面谈关于基本正则表达式的使用

     匹配字符

      . :任意一个字符

      [abc] :表示匹配一个字符,这个字符必须是abc中的一个

      [a-zA-Z] :表示匹配一个字符,这个字符必须是a-z或者A-Z这52个字母中的一个

      [^123]  :匹配一个字符,这个字符是除了1,2,3以外的所有字符

      对于一些常用的字符集,系统做了定义

      [A-Za-z]  等价于  [[:alpha:]]

      [0-9] 等价于  [[:digit:]]

      [A-Za-z0-9]  等价于  [[:alnum:]]

      tab,space  等空白字符  [[:space:]]

      [A-Z]  等价于  [[:upper:]]

      [a-z]  等价于  [[:lower:]]

      标点符号   [[:punct:]]

 

       讲解:这里无论是[[:lower:]]或者[[:space:]]都只代表着一个字符,所以如果你要匹配多个字符,那么你要自己往后面加,笔者也是搞了很久才弄清楚,[[:lower:]]这种字符集的用法。

 

匹配次数

  \{m,n\}  :匹配其前出现的字符至少m次,至多n次。

  \?  :匹配其前面出现的内容0次或1次,等价于\{0,1\}

  *    :匹配其前面出现的内容任意次,等价于\{0,\},所以".*"表述任意字符任意次,即无论什么内容全部匹配

     讲解:这里我用了/.*sh即只要包含sh的字符串,前面的字符全部打印

    讲解:这里的意思为以/开头,中间可以有0-2个字符,以sh结尾组成的字符串,这里笔者我也是问了许多大佬才理解出来的。有点惭愧

    讲解:这里就是单纯的sh结尾,前面2个字符组成的字符串,因为没有固定的开头,所以任意取两字符串就行

 位置锚定

  ^  :锚定行首   如 grep “^h” /etc/passwd  这里就筛选出来的就必须是以h开头的项

 

   $ :锚定行尾。 技巧 :“^$”用于匹配空白行

   \b或\<   :锚定单词的词首。如“\blike”不会匹配alike,但是会匹配liker.   所以下面连个是相同的意思

   \b或\> :锚定词尾。这里的格式为“h\b”或者“h\>”。如“\blike\b”因为锚定的是词首和词尾,所以不会匹配alike或liker,只会匹配like

     \B :和\b相反,\b是一定出现在单词首或尾,\B则是一定不出现在单词首或尾,可以是中间

分组及引用

\(string\) :将string作为一个整体方便后面使用

\1:引用第一个左括号及其对应的右括号所匹配的内容

\2:引用第二个左括号及其对应的右括号所匹配的内容

\n:引用第n个左括号及其对应的右括号所匹配的内容

这里使用[[:lower:]]或者[[:alpha:]]结果都是一样的,显示以相同字母开始并结尾的行

  扩展(Extend)正则表达式(注意要使用扩展的正则表达式要加-E选项,或者直接使用egrep)

      匹配字符:这部分和基本正则表达式一样

      匹配次数:

          * :和基本正则表达式一样

          ?:基本正则表达式\?,这里没有\

         (m,n):相比基本正则表达式也没有了\

               + :匹配其前面的字符至少一次,相当于{1,}.

      位置锚定:和基本正则表达式一样

      

      分组及引用

        (string):相比基本正则表达式也没有了\

           \1:引用部分和基本正则表达式一样

         \n:引用部分和基本正则表达式一样

      或者

         a | b  :匹配a或b,注意a是指  |  的左边的整体,b也同理。比如C | cat 表示的是C或cat,而不是Cat或cat  ,如果要表示Cat 或cat,则应该写成为(C | c)at、记住(string)除了用于引用还用于分组

      注1:默认情况下,正则表达式的匹配工作在贪婪模式下,也就是说它会尽可能长的去匹配,比如某一字符串abacd,如果搜索内容为“a.*b”那么直接匹配abacd这个串,而不会只匹配ab或acd

      注2:所有的正则表达式,如[.*(等,若要搜索*,而不是想把*解释为重复先前字符任意次,可以使用\*来转义

猜你喜欢

转载自www.cnblogs.com/cheneyboon/p/11437481.html
今日推荐