linux - 从 Linux 控制台的输出中提取字符串

标签 linux sed awk grep tr

我一直在尝试从 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= 之后的每个字符?

最佳答案

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/

相关文章:

linux - 通过参数字符串查找进程

awk - 如何在gawk中指定文件前缀

linux - 如何将 awk 输出传递到 bash 变量?

linux - 如何匹配文件中包含某些单词的前三行

linux写系统调用和libc

perl - 使用awk或cut或perl选择特定的列

linux - 在Linux中使用for循环和awk重定向和打印脚本输出

awk - 仅从输入中查找匹配的值

c++ - 如何通过socket接收1440以上

linux - 从 shell 脚本执行时使用 psql 关闭 postgres 连接