linux sed,awk 管道组合命令解析 (e.g. netstat -anp | grep 8099| grep -v grep | awk '{print $7}' |.....)

Linux命令是非常丰富的,但是很少人能充分的掌握这些命令。本文结合项目中用的的一些场景简单从组合命令的角度解析下使用方法。每个命令的细节使用方法不在本文介绍范围之列,具体可以参考:sed命令细节,awk命令细节

1.在配置Jenkins时,原来使用的杀死进程的组合命令是ps -ef | grep tomcat| grep -v grep | awk '{print $2}' |  sed -e 's/^/kill -9 /g' | sh

有时候单纯使用Tomcat的shutdown不能充分杀死进程,所以需要增加一个查询强制杀死进程的组合命令。

先解析下这个命令:

ps -ef | grep tomcat| grep -v grep | awk '{print $2}' |  sed -e 's/^/kill -9 /g' | sh

1)先通过ps -ef|grep tomcat 来查找含有 tomcat 字符的进程

2)通过grep -v grep 去除掉含有grep的结果


3)通过awk '{print $2}' 来打印一行中第二列的字符


4)通过sed命令在该行最前面增加kill -9 然后通过管道增加执行命令sh

也就是组合命令最后一部分: sed -e 's/^/kill -9 /g' | sh

这个地方稍微多解释一点, sed -e 表示后面会用正则表达式的替换或者相关操作, ^表示行开头, 's/X/Y/g' 表示用Y 替换X

2. 当时服务器上只有这一个应用,每次重启直接把tomcat干掉没有什么问题,但是后来在这台服务器上部署了多个tomcat服务,同时也有多个应用在跑,如果每次重启都要把含有tomcat字样的进程干掉的话,就不合适了。此时命令修改为如下组合:此时的例子是假设我们要杀掉的是8099端口的进程:

netstat -anp | grep 8099| grep -v grep | awk '{print $7}' | sed -e 's/\/java//g' | sed -e 's/^/kill -9 /g' | sh

现在解析一下这个命令:

1)netstat -anp | grep 8099 这个命令大家都不陌生,查找8099端口的状态以及相应的PID

2)grep -v grep 同样的去除掉grep行

3)awk '{print $7}',此时我们要留下的是第七列,我们可以数一下:


4)取完之后结果是这样的


我们只想要PID,而不想要'/java'

这时候就用到下面的命令了sed

5)sed -e 's/\/java//g',把/java 替换成''这时候就达到我们的要求了,只留下了PID


6)接下来就跟之前的命令一样了,直接干掉这个进程就好了


这是在实践中使用到的组合命令,场景还是比较明显的,通用性较强,也不难,所以拿出来分享一下。

你可能感兴趣的:(Linux)