【问题标题】:Extracting strings from output in Linux console从 Linux 控制台的输出中提取字符串
【发布时间】:2013-10-30 21:25:35
【问题描述】:

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

【问题讨论】:

  • 发布一个简短的文本 sn-p 比屏幕截图要好得多,尤其是不在线的。

标签: linux sed awk grep tr


【解决方案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 }

就在单引号结束之前。

【讨论】:

  • 另外,我想列出所有的 PID 及其对应的脚本,例如
  • 462 DEQUEUE_ALL_EVENTS_PLSQL
  • 您的要求不是很清楚。如果您可以更详细地澄清您的问题,请这样做。目前,直接的怀疑是你想要PROCESS_ALLBETS而不是PROCESS_ALL_BETS
  • 我附加了你的脚本
    ps -eo pid,args | grep PRD_ | egrep startcen.sh |更多 | awk '/PRD_/ && /startscen\.sh/ && $4 ~ /PROCESS_ALL_BETS/{ n=$8;子(/^-SESSION_NAME=/,"",n); print $1, n }'
    但我没有看到输出。
  • 在我共享的屏幕截图中,我看到列出了不同进程的行,这些进程具有以下正则表达式“PRD_”和“./startscen.sh” - 现在我需要一个脚本,在其中传递一个字符串,例如PRO'' 获取对应于 PROCESS_ALL_BET 的行输出为 13561。
猜你喜欢
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多