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
。大家如果有兴趣可以自己试着玩一玩。