Regex bash脚本:解析grep命令输出并传递给第二个操作
有时会崩溃,留下繁忙的资源,阻止完全卸载和重新安装docker卷 我可以通过执行以下操作手动修复此问题:Regex bash脚本:解析grep命令输出并传递给第二个操作,regex,bash,grep,pipe,Regex,Bash,Grep,Pipe,有时会崩溃,留下繁忙的资源,阻止完全卸载和重新安装docker卷 我可以通过执行以下操作手动修复此问题: docker-compose down 其中: grep -l 12c8b1e0d711db12b /proc/*/mountinfo 等 其中每个数字都是进程PID,现在我可以做了 /proc/12053/mountinfo /proc/16127/mountinfo ... /proc/16139/mountinfo /proc/16192/mountinfo 我正试图将
docker-compose down
其中:
grep -l 12c8b1e0d711db12b /proc/*/mountinfo
等
其中每个数字都是进程PID,现在我可以做了
/proc/12053/mountinfo
/proc/16127/mountinfo
...
/proc/16139/mountinfo
/proc/16192/mountinfo
我正试图将其放入bash脚本中,以帮助自动化此过程
问题:
我需要通过正确的正则表达式传递grep命令的输出,以解析出第二个参数(每行/proc/16192/mountinfo中的int值)。
我需要将它们组合成一个空格分隔的字符串,最后将该字符串作为参数传递给kill
我不确定如何在bash脚本中实现这一点
欢迎的任何和所有指针您可以使用带有参数替换的直接bash脚本来提取进程id并将其放入数组中,然后在其上使用
kill
例如:
kill -9 16139 12053 ... 16139
您可以使用带有参数替换的直接bash脚本来提取进程id并将它们放入数组中,然后对其使用
kill
例如:
kill -9 16139 12053 ... 16139
当你发现你想解析GRIP、SED等的输出时,你应该考虑只使用AWK。
declare -a process
for t1 in $(grep -l 12c8b1e0d711db12b /proc/*/mountinfo); do
t2="${t1#/proc/}" # remove /proc/ from beginning
pid="${t2%/mountinfo}" # remove /mountinfo from the end
process+=("$pid")
done
kill -9 "${process[@]}"
当你发现你想解析GRIP、SED等的输出时,你应该考虑只使用AWK。
declare -a process
for t1 in $(grep -l 12c8b1e0d711db12b /proc/*/mountinfo); do
t2="${t1#/proc/}" # remove /proc/ from beginning
pid="${t2%/mountinfo}" # remove /mountinfo from the end
process+=("$pid")
done
kill -9 "${process[@]}"
好方法,我可以建议
process+=(“${t1/[^[:digit:][]/}”)
当然可以。它的性能更好,并且消除了不必要的临时变量创建。为了可读性,我更喜欢pid=“${t1/[^[:digit:][]/}”,而不是在一行中完成所有操作。似乎工作得很好,并且没有我预期的复杂。谢谢好方法,我可以建议process+=(“${t1/[^[:digit:][]/}”)
当然可以。它的性能更好,并且消除了不必要的临时变量创建。为了可读性,我更喜欢pid=“${t1/[^[:digit:][]/}”,而不是在一行中完成所有操作。似乎工作得很好,并且没有我预期的复杂。谢谢