1

我一直在尝试从 Linux 的输出中提取特定的字符串

例如:

ps -eo pid,args | grep PRD_ | egrep startscen.sh | more

给出以下输出

http://i.imgur.com/reS7wZ1.png

(全尺寸图片:http: //i.imgur.com/reS7wZ1.png

我知道 awk、sed、tr 可用于提取诸如 PID 之类的详细信息,但我不确定如何编写查询以准确获取第四列具有特定字符串(如“PROCESS_ALL_BETS”)的行的 pid

或者如何提取 _NAME= 之后的每个字符?

4

1 回答 1

1

来救援。

ps -eo pid,args | awk '/PRD_/ && /startscen\.sh/ && $4 ~ /PROCESS_ALLBETS/'

(在图像中,你有PROCESS_ALLBETS,所以我想这就是你真正想要的,即使你的文字说PROCESS_ALL_BETS。)

这将选择打印符合以下所有条件的每一行:

  • /PRD_/-- 该行某处有一个“PRD_”。也许您会将其收紧$6 ~ /^-NAME=PRD_/到仅在第六场开始时匹配的内容。
  • /stratscen\.sh/-- 在线某处有一个匹配这个正则表达式。同样,为了提高精度,您可能希望将其更改为$3 ~ /startscen\.sh/或者即使$3 == "startscen.sh"您只想要完全匹配。
  • $4 ~ /PROCESS_ALLBETS/-- 第四个字段匹配这个正则表达式。

以上将简单地打印所有匹配的行。-SESSION_NAME=要仅打印删除前缀的第一个字段和第八个字段,请添加类似

{ n=$8; sub(/^-SESSION_NAME=/,"",n); print $1, n }

就在结束单引号之前。

于 2013-10-22T06:33:20.720 回答