Shell grep的几个参数



Shell grep的几个参数

                                                                                                                                   lxg@2015-03-16

  • -o参数

    echo "aaaabc"|grep -o "aa"|grep -v grep的输出结果是?如果存在一个”testing:grep”的进程,你想通过 ps aux|grep –o “testing: grep”|grep –v grep来查找进程,那么前面的输出结果是?

    第一个示例的输出是:

lxg ~ $ echo "aaaabc"|grep -o "aa"

aa

aa

第二个示例的输出是:

lxg ~ $ ps aux|grep –o “testing: grep”|grep –v grep

testing: grep

testing: grep

从上面的输出还真是有点跟我自己预想的结果有一些不一样,预想的两个示例输出应该都只有一行了,但是从结果来看每一个输出都有两个一模一样的输出结果。

首先看一下grep –o参数的含义:

-o, --only-matching

   Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.

-o就是只输出匹配PATTERN的字符串,也就是说只要跟PATTERN匹配那么就会输出,而不是整个行,而且只会输出匹配部分。

所以第一个示例中因为” aaaabc”可以匹配到”aa”两次,那么输出就会输出两个”aa”字符串,如果把示例换成” echo"aaaabc"|grep -o ‘ab’”那么输出也就只有一个”ab”字符串了。

第二个示例中我明明在后面进行了grep –v grep操作了,为什么还是会有两个输出呢?这是因为-o参数只会输出匹配部分,而不是输出匹配的整行了。所以经过-o参数后已经没有grep字符串了,也就是说最后的grep –v没有起作用。

从上文来看如果没有理解-o参数的真实含义,那么很有可能就会掉到一个坑里面,本来以为只匹配一次其实匹配到了两次。

  • -c参数,输出匹配的个数,而不是匹配的内容。有时候你想判断当前有几个” testing: grep”进程在运行,一种方式是:

lxg ~ $ ps aux|grep –o “testing: grep”|grep –v grep|wc -l

1

另外一种方式是:

lxg ~ $ ps aux|grep –c “testing: grep”|grep –v grep -c

1

  • 在查找进程的时候,利用[]实现同时grep –vgrep的功能。

lxg ~ $ ps aux|grep “testing: grep”

lxg     11722  0.0  0.0   5804   724 pts/1    S+   11:46   0:00 grep --colour=auto testing: grep      #grep自身也出来了

lxg     11513  0.0  0.0   5804   154 pts/1    S+   10:26   0:00 testing: grep

 

lxg ~ $ ps aux|grep “testing: grep”|grep –v grep

lxg     11513  0.0  0.0   5804   154 pts/1    S+   10:26   0:00 testing: grep      #-v 去掉grep进程的结果

 

lxg ~ $ ps aux|grep “[t]esting: grep”

lxg     11513  0.0  0.0   5804   154 pts/1    S+   10:26   0:00 testing: grep       #神奇的事情发生了

从上面的输出来看[]起到了一个很神奇的作用,其实这个的原理很简单了:

grep “[t]esting: grep” 这个进程要在ps进程先启动,然后ps执行结束后,grep再继续执行。所以ps进程对其命令记录的是完全的字符串” [t]esting: grep”,然后等ps结束后grep运行的时候对” [t]esting: grep”进行正则表达式的解析,[t]esting: grep解析后就是testing: grep

我们还可以加上下面这个验证:

ps -ef | tee pro.log | grep [b]ash

cat pro.log | grep grep

lxg       6868  6795  0 13:07 pts/1    00:00:00 grep [b]ash

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值