6

执行“ps -ef | grep port”时收到以下消息

apache    6215     1  0 11:20 ?        00:00:00 perl /scripts/myscript.pl -sn 4123E -sku HSME01-HW -port 8

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

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

2 回答 2

9

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

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

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

于 2013-08-06T19:09:39.007 回答
4

由于问题被标记为bash,因此首选使用 bash-only 解决方案(无 awk 或 perl)...

LINE='apache    6215     1  0 11:20 ?        00:00:00 perl /scripts/myscript.pl -sn 4123E -sku HSME01-HW -port 8'

## Convert string to bash array
ARR=($LINE)

echo "start time (${ARR[4]})"
echo "sn (${ARR[10]})"
echo "sku (${ARR[12]})"
echo "port (${ARR[14]})"

## How to save the value?
START_TIME=${ARR[4]}
于 2013-08-06T19:09:12.060 回答