linux三剑客之grep命令详解

先来小菜一碟:

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

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

 

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

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

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

 

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" 

  

 更多示例:

  

 

转载于:https://www.cnblogs.com/temagenie/p/9443244.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值