解析shell中的ps和grep输出

Jer*_*emy 5 linux bash shell grep cgi

当我执行"ps -ef | grep port"时,我收到以下消息

apache    6215     1  0 11:20 ?        00:00:00 perl /scripts/myscript.pl -sn 4123E -sku HSME01-HW -port 8
Run Code Online (Sandbox Code Playgroud)

有没有办法解析以下内容:

  • 开始时间(11:20)
  • sn(4123E)
  • sku(HSME01-HW)
  • 港口(8)

Ans*_*ers 8

您可以使用awk过滤和解析:

ps -ef | awk '/[p]ort/ {printf "start time: %s\nsn: %s\nsku: %s\nport: %s\n", $5, $11, $13, $NF}'
Run Code Online (Sandbox Code Playgroud)

正如glenn jackman在评论中指出的那样,过滤器字符串中的方括号会阻止表达式在进程列表中匹配过滤器字符串本身.

  • 因为那也可以从ps输出中选择awk命令,使用`/ [p] ort /`来过滤 (2认同)
  • @Jeremy `awk` 自动将输入行拆分为字段(默认分隔符为空格)。这些字段可以通过变量`$1`、`$2`、`$3` 等访问。`$NF` 是一个特殊变量,它具有输入行最后一个字段的值(NF 表示“字段数”)。在您的情况下,您也可以使用“$15”,但有时如果您不需要事先知道实际的字段数,则更方便。 (2认同)