我一直在尝试从 Linux 的输出中提取特定的字符串
例如:
ps -eo pid,args | grep PRD_ | egrep startscen.sh | more
给出以下输出
(全尺寸图片:http://i.imgur.com/reS7wZ1.png)
我知道 awk、sed、tr 可用于提取 PID 等详细信息,但我不确定如何编写查询以准确获取第四列具有特定字符串(如“PROCESS_ALL_BETS”)的行的 pid
或者我如何提取 _NAME= 之后的每个字符?
最佳答案
Awk 助你一臂之力。
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 }
就在结束单引号之前。
关于linux - 从 Linux 控制台的输出中提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19510574/