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 和帶有參數的命令。該表達式^[^ ]\+
匹配從行開頭到第一個空格的所有字元。