在shell中parsingps和grep输出

当我执行“ps -ef | grep port”时,我会收到以下消息:

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

有没有办法parsing以下内容:

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

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

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

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

由于该问题被标记为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]}