Linux三剑客之grep命令详解

Posted viviian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux三剑客之grep命令详解相关的知识,希望对你有一定的参考价值。

先来小菜一碟:

  cat /etc/passwd | grep -c "/bin/bash$" 

  以上,用来统计/etc/passwd 文件中以/bin/bash结尾的用户个数。

 

grep用来基于正则去实现行过滤的工具;它有很多衍生命令:

  egrep 扩展的grep,即默认使用扩展正则表达式的grep,更高级。

  fgrep 专用于文件行过滤的工具。

grep命令格式:grep [option] pattern file        option表示选项,pattern 表示要匹配的模式,file表示要查询的文件名

                     

grep命令的常用选项:

  -E    开启扩展正则模式,相当于使用egrep命令

  -F    关闭正则表达式,将PATTERN看做字符串直接匹配

  -G    默认,开启基本正则表达

  -P    开启perl兼容正则模式,利用perl语言中的正则匹配,表示我不会,因此不涉及

  以上,属于pattern匹配方式的选择————————————————————

  -e    该选项针对"-",由于grep默认不支持pattern中包含"-" 的匹配。使用-e可以避免报错。

  -f    将PATTERN写入指定文件,通过该选项,可调用文件中的PATTERN去匹配目标文件

  -i    匹配时,忽略大小写进行

  -v    排除PATTERN,显示剩余没有被匹配到的内容行

  -w    将PATTERN视为一个单词(前后不是非字母就是一个结束),相当于PATTERN中加入了 " PATTERN"去定界。

  -x    当PATTERN匹配了整行内容时,才输出到屏幕;如

[[email protected] tmp]# cat /etc/passwd |grep "^root"
root:x:0:0:root:/root:/bin/bash
[[email protected] tmp]# cat /etc/passwd |grep -x "^root"
[[email protected] tmp]# cat /etc/passwd |grep -x "^root.*"
root:x:0:0:root:/root:/bin/bash

  以上是帮助PATTERN提高性能的选项——————————————————

  -c    PATTERN成功匹配到内容的次数

  --color=   设置高亮方式,可以用{never|always|auto} 来实现

  -L    当grep目标文件是多个文件时,结果会输出“文件名:匹配行内容”的形式。-L则只将不包含匹配行的文件名输出。和-v类似。

  -R    递归查询匹配目录子文件,当目标文件类型为目录时

  -o    只输出被PATTERN匹配到的内容,而非默认输出整行内容

  -m #   匹配到内容的最大输出行数,如三行包含PATTERN,只输出两行,即可-m 2

  -q    静默执行

  -s    无提示,stderr会被忽略,-sq组合可完全屏蔽grep的输出

  以上是对grep结果的规范选项—————————————————————

  -H    输出文件名,在行内容前,当目标文件为多个时,默认

  -n    显示行号

  以上针对grep结果查看的选项—————————————————————

  -A #    显示匹配行及其后#行内容,理论上共#+1行

  -B #    显示匹配行及其前#行内容,理论上共#+1行

  -C #    显示匹配行及其前后#行内容,理论上共2#+1行

 

关于grep命令的执行状态码:

    0  成功匹配

    1  未匹配

    2  报错,一般是目标文件不存在

基本正则表达式:

 技术分享图片

    其中,(  ) 不仅可以用作反向引用的匹配范围,也可以用于组合字符串。如下例:

[[email protected] tmp]# echo "xyz2xyzxy" |grep "xyz?" -o
xyz
xyz
xy                -----xy被匹配到
[[email protected] tmp]# echo "xyz2xyzxy" |grep "(xyz)?" -o
xyz
xyz      ------xy被为匹配到,由于xyz是一个组合,?针对的是这个组合而言

 

扩展正则表达式:

    基于基本正则表达式;

    ?  变为  ?

    +  变为  +

    {}相关的PATTERN一律变为{} 的PATTERN,省去了标志

    ()     变为      ()

    同时引入了 " | " 表示逻辑或,表示匹配多个内容:

      chkconfig --list 3:on |grep -vE "crond|network|sshd|syslog" 

 技术分享图片

 











以上是关于Linux三剑客之grep命令详解的主要内容,如果未能解决你的问题,请参考以下文章

Linux三剑客之grep命令详解

[Linux教程]Linux 三剑客之 awk 实战详解

linux文本处理三剑客之grep家族及其相应的正则表达式使用详解

Linux文本处理三剑客grepsedawk用法详解

Linux三剑客之grepegrep及正则表达式使用详解

性能工具之linux三剑客awkgrepsed详解