簡體   English   中英

bash腳本:解析grep命令輸出並傳遞給第二個動作

[英]bash script: parsing grep command output and passing to second action

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腳本中解決此問題

任何指針都歡迎

您可以使用帶有參數替換的直接bash腳本來提取進程ID,並將其放入數組中,然后在其上使用kill

例如:

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[@]}"

每當您發現自己想要解析grep,sed等的輸出時,就應該真正考慮僅使用awk。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM