grep命令打印匹配行相邻多行结果

grep命令用来对输出的结果按行进行匹配,如果有找到匹配的字符串则打印出该行内容。但是很多时候我们想要的结果是在和关键字相隔的前后几行,这种场景要怎么解决呢,这一节我们一起来看看。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

使用方法详解

grep的帮助文档中提到有几个参数是专门负责输出结果展示的,其中的-A,-B,-C三个参数就是我们今天需要用到的。后面需要接一个数字表示需要额外打印的行数。

Context control:
  -B, --before-context=NUM  print NUM lines of leading context
  -A, --after-context=NUM   print NUM lines of trailing context
  -C, --context=NUM         print NUM lines of output context
  -NUM                      same as --context=NUM
      --color[=WHEN],
      --colour[=WHEN]       use markers to highlight the matching strings;
                            WHEN is 'always', 'never', or 'auto'
  -U, --binary              do not strip CR characters at EOL (MSDOS/Windows)

使用场景

打印后面相邻n行

利用-A n达到目的,例如想要获取eth1这个网卡的ip信息

vagrant@minion1:/etc/salt$ ifconfig | grep eth1
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
vagrant@minion1:/etc/salt$ ifconfig | grep eth1 -A 1
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.50.11  netmask 255.255.255.0  broadcast 192.168.50.255

打印前面相邻n行

利用-B n达到目的,例如想查看10.0.2.15这个ip属于哪个网卡

vagrant@minion1:/etc/salt$ ifconfig | grep 10.0.2.15
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
vagrant@minion1:/etc/salt$ ifconfig | grep 10.0.2.15 -B 1
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255

打印前后相邻n行

利用-C n达到目的,这里就不演示了

总结

其实上面的那个--color参数也是蛮有意思的,可以设置关键字是否显示高亮,可以接3种参数always, never, auto。大家如果有兴趣可以自己试着玩一玩。

发布了25 篇原创文章 · 获赞 2 · 访问量 1688

猜你喜欢

转载自blog.csdn.net/Victor2code/article/details/103601727