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个字符。

由于您已经使用了尴尬,这可能是一个更好的选择:

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

您还可以重新格式化 ps 的输出以使 grepping 更容易:

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

Switch-o pid,args仅显示PID和命令,该表达式^[^ ]\+从阵容开始到第一个空间都与所有字符匹配。

相关内容