bash脚本:解析grep命令输出并传递给第二个动作

时间:2018-10-06 01:57:40

标签: regex bash grep pipe

docker-compose down 

有时会崩溃,留下繁忙的资源,从而无法完全卸载和重新安装Docker卷

我可以通过执行以下操作来手动解决此问题:

grep -l 12c8b1e0d711db12b /proc/*/mountinfo    

给出:

/proc/12053/mountinfo
/proc/16127/mountinfo
...
/proc/16139/mountinfo
/proc/16192/mountinfo

每个数字现在都是我可以做的进程PID

kill -9 16139 12053 ... 16139

我正在尝试将其放入bash脚本中以帮助实现此过程的自动化。

问题: 我需要通过正确的正则表达式传递grep命令的输出,以解析出第二个参数(/ proc / 16192 / mountinfo的每一行中的int值)。 我需要将它们组合成一个空格分隔的字符串,最后将此字符串作为参数传递给kill

我不太确定如何在bash脚本中解决此问题

任何人和所有指针都欢迎

2 个答案:

答案 0 :(得分:4)

您可以使用带有参数替换的直接bash脚本来提取进程ID,并将其放入数组中,然后在其上使用a

例如:

kill

答案 1 :(得分:0)

每当您发现自己想要解析grep,sed等的输出时,就应该真正考虑仅使用awk。

procs=$(awk '/12c8b1e0d711db12b/{split(FILENAME,f,"/"); print f[3]}' /proc/*/mountinfo)
[ -n "$procs" ] && kill -9 "$procs"