码迷,mamicode.com
首页 > 系统相关 > 详细

Linux三剑客之grep命令详解

时间:2018-12-14 15:41:48      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:大小   pattern   host   etc   ade   sys   屏蔽   img   基于   

先来小菜一碟:

  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中加入了 " \bPATTERN\b"去定界。

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

[root@localhost tmp]# cat /etc/passwd |grep "^root"
root:x:0:0:root:/root:/bin/bash
[root@localhost tmp]# cat /etc/passwd |grep -x "^root"
[root@localhost 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  报错,一般是目标文件不存在

基本正则表达式:

 技术分享图片

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

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

 

扩展正则表达式:

    基于基本正则表达式;

    \?  变为  ?

    \+  变为  +

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

    \(\)     变为      ()

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

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

 技术分享图片

 

Linux三剑客之grep命令详解

标签:大小   pattern   host   etc   ade   sys   屏蔽   img   基于   

原文地址:https://www.cnblogs.com/viviian/p/10119564.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!