我一直在尝试从Linux中的输出中提取特定字符串
例如:
ps -eo pid,args | grep PRD_ | egrep startscen.sh | more
给出以下输出
(全尺寸图片:http://i.imgur.com/reS7wZ1.png)
我知道awk,sed,tr可以用来提取像PID这样的细节,但是我不知道如何编写查询以获得第四列具有特定字符串的行的pid,例如'PROCESS_ALL_BETS'< / p>
或者如何在_NAME =之后提取每个字符?
答案 0 :(得分: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 }
就在结束单引号之前。