Bash:Grep 正規表示式無法運作

Bash:Grep 正規表示式無法運作

grep像這樣使用時:

ps aux | grep 'processname' | awk '{print $2}'

返回PIDs進程數。processname當使用這個時:

ps aux | grep '^processname' | awk '{print $2}'

我試圖獲取命令行以 開頭的進程processname,但它不起作用。

運行的範例進程:

processname
other_processname

我想獲得PID第一個選項的 ,因為processname它是命令的開始。

我也嘗試過使用這些-E, -e, -w標誌,它們都返回相同的結果。有什麼不正確的嗎?

答案1

^標記行的開始,而不是欄位的開始。

ps aux | grep ' processname'

會更接近,但仍然可能會給出一些誤報。

由於其他列的寬度是固定的,您也可以使用

grep '^.\{65\}processname'

這裡,^.\{65\}距離行首正好 65 個字元。確切的數字可能會因您的系統而異。

由於您已經在使用 awk,這可能是更好的選擇:

ps aux | awk '{ if ($11 == "processname") print $2 }'

您也可以重新格式化 ps 的輸出以使 grep 更容易:

ps ax -o pid,args | grep '^[^ ]\+ processname'

此開關-o pid,args使 ps 僅顯示 PID 和帶有參數的命令。該表達式^[^ ]\+匹配從行開頭到第一個空格的所有字元。

相關內容