Answers:
^
标记线的开始,而不是字段。
ps aux | grep ' processname'
会更接近,但它仍然可能会产生一些误报。
由于其他列的宽度是固定的,您也可以使用
grep '^.\{65\}processname'
在这里,^.\{65\}
从行首开始就是65个字符。确切的数字可能因系统而异。
由于你已经在使用awk,这可能是一个更好的选择:
ps aux | awk '{ if ($11 == "processname") print $2 }'
您还可以重新格式化ps的输出以使grepping更容易:
ps ax -o pid,args | grep '^[^ ]\+ processname'
该开关-o pid,args
使ps仅显示PID和带参数的命令。表达式^[^ ]\+
匹配从行的开头到第一个空格的所有字符。
cmd
显示裸命令,例如,仅显示processname
没有参数。
cmd
和comm
。后者显示裸命令。cmd
并且args
是别名。
$2
表示第二个字段。