Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Linux控制台中从输出中提取字符串_Linux_Sed_Awk_Grep_Tr - Fatal编程技术网

在Linux控制台中从输出中提取字符串

在Linux控制台中从输出中提取字符串,linux,sed,awk,grep,tr,Linux,Sed,Awk,Grep,Tr,我一直在尝试在Linux中从输出中提取特定字符串 例如: ps -eo pid,args | grep PRD_ | egrep startscen.sh | more 给出以下输出 (全尺寸图像:) 我知道awk、sed、tr可以用来提取PID之类的细节,但我不知道如何编写查询来精确获取行的PID,其中第四列有一个特定字符串,如“PROCESS\u ALL\u BETS” 或者如何提取_NAME=之后的每个字符 Awk去救援 ps -eo pid,args | awk '/PRD_/ &a

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

例如:

ps -eo pid,args | grep PRD_ | egrep startscen.sh | more
给出以下输出

(全尺寸图像:)

我知道awk、sed、tr可以用来提取PID之类的细节,但我不知道如何编写查询来精确获取行的PID,其中第四列有一个特定字符串,如“PROCESS\u ALL\u BETS”

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

Awk去救援

ps -eo pid,args | awk '/PRD_/ && /startscen\.sh/ && $4 ~ /PROCESS_ALLBETS/'
(在图中,您有
PROCESS\u ALLBETS
,因此我猜这就是您真正想要的,即使您的文本中说
PROCESS\u ALLBETS

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

  • /PRD\u/
    ——这行的某个地方有一个“PRD”。也许您可以将其压缩为类似于
    $6~/^-NAME=PRD\uu/
    的值,以便只匹配第六个字段的开头
  • /stratscen\.sh/
    ——行中的某个地方与此正则表达式匹配。同样,为了提高精度,如果只需要精确匹配,您可能需要将其更改为
    $3~/startsen\.sh/
    ,甚至
    $3==“startsen.sh”
  • $4~/PROCESS\u ALLBETS/
    ——第四个字段与此正则表达式匹配
以上内容只需打印所有匹配行。要仅打印前缀为
-SESSION\u NAME=
的第一个字段和第八个字段,请添加如下内容

{ n=$8; sub(/^-SESSION_NAME=/,"",n); print $1, n }
就在结束单引号之前。

谢谢您的帮助

ps -eo pid,args | awk '/PRD_/ && /startscen\.sh/ && $4 ~ /PROCESS_ALLBETS/'
(在图中,您有
PROCESS\u ALLBETS
,因此我猜这就是您真正想要的,即使您的文本中说
PROCESS\u ALLBETS

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

  • /PRD\u/
    ——这行的某个地方有一个“PRD”。也许您可以将其压缩为类似于
    $6~/^-NAME=PRD\uu/
    的值,以便只匹配第六个字段的开头
  • /stratscen\.sh/
    ——行中的某个地方与此正则表达式匹配。同样,为了提高精度,如果只需要精确匹配,您可能需要将其更改为
    $3~/startsen\.sh/
    ,甚至
    $3==“startsen.sh”
  • $4~/PROCESS\u ALLBETS/
    ——第四个字段与此正则表达式匹配
以上内容只需打印所有匹配行。要仅打印前缀为
-SESSION\u NAME=
的第一个字段和第八个字段,请添加如下内容

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

就在结束单引号之前。

发布一个简短的文本片段会比截图更好,尤其是不在线的截图。发布一个简短的文本片段会比截图更好,尤其是不在线的截图。此外,我想列出所有的PID及其相应的脚本,例如462 DEQUEUE\u all\u EVENTS\u PLSQL您的需求不是很清楚。如果你能用更多的细节来澄清你的问题,请这样做。目前,最直接的怀疑是你想要的是
PROCESS\u ALLBETS
而不是
PROCESS\u ALLBETS
。我附加了你的脚本
ps-eo-pid,args | grep PRD | egrep startsen.sh | more | awk'/PRD/&&&/startsen\.sh/&$4~/PROCESS\u ALL\u-BETS/{n=$8;sub(/^-SESSION u-SESSION NAME=/,“”,n);print$1,n}“
但我没有看到输出。在我共享的屏幕截图中,我看到了列有不同进程的行,这些进程具有以下正则表达式“PRD_uu”和“/startsen.sh”-现在我需要一个脚本,在其中我传递一个字符串,如PRO'',获取与进程对应的行,所有这些进程的输出都是13561。另外,我想列出所有的PID及其相应的脚本,例如462 DEQUEUE\u all\u EVENTS\u PLSQL您的需求不是很清楚。如果你能用更多的细节来澄清你的问题,请这样做。目前,最直接的怀疑是你想要的是
PROCESS\u ALLBETS
而不是
PROCESS\u ALLBETS
。我附加了你的脚本
ps-eo-pid,args | grep PRD | egrep startsen.sh | more | awk'/PRD/&&&/startsen\.sh/&$4~/PROCESS\u ALL\u-BETS/{n=$8;sub(/^-SESSION u-SESSION NAME=/,“”,n);print$1,n}“
但我没有看到输出。在我共享的屏幕截图中,我看到了列有不同进程的行,这些进程具有以下正则表达式“PRD_uu”和“/startsen.sh”-现在我需要一个脚本,在其中我传递一个字符串,如PRO'',获取与进程对应的行,所有的输出都是13561。