解析shell中的ps和grep输出

时间:2013-08-06 18:52:24

标签: 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

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

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

2 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:3)

由于问题被标记为bash,因此首选使用仅使用bash的解决方案(无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]}