Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex bash脚本:解析grep命令输出并传递给第二个操作_Regex_Bash_Grep_Pipe - Fatal编程技术网

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

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卷

我可以通过执行以下操作手动修复此问题:

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:][]/}”,而不是在一行中完成所有操作。似乎工作得很好,并且没有我预期的复杂。谢谢