【问题标题】:how to extract word from ps -aux如何从ps -aux中提取单词
【发布时间】:2019-08-20 08:47:07
【问题描述】:

当我执行命令 ps -ef | grep yypasswd 我收到这个输出。

testacc 25124194 2512312620   0 08:00:53  pts/0  0:00 grep yypasswd

如何用命令从这个输出词“yypasswd”中提取

【问题讨论】:

  • 这个 awk 技巧不起作用
  • 你想做什么?为什么要提取您正在搜索的单词?
  • 好的 james 感谢它对 $NF 的帮助
  • 等等。你grep 来自ps 输出的string,唯一拥有string 的进程是你的grep string,你想从中提取string

标签: bash awk grep aix


【解决方案1】:
ps -ef | grep -o yypasswd

来自 man grep :

-o, --only-matching 仅打印匹配行的匹配(非空)部分,每个这样的部分在单独的输出行上。

请注意,您发布的 ps 行是您运行的 grep 的实际过程。要排除这个,你可以这样做:

ps -ef | grep -v grep | grep -o yypasswd

另一种搜索进程名称的方法是使用 pgrep :

pgrep -f yypasswd

pgrep 会给你匹配进程的 PID

【讨论】:

  • grep:不是一个可识别的标志:o
  • 用法:grep [-r] [-R] [-H] [-L] [-E|-F] [-c|-l|-q] [-insvxbhwyu] [- p[parasep]] -e pattern_list... [-f pattern_file...] [file...] 用法:grep [-r] [-R] [-H] [-L] [-E|-F ] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] [-e pattern_list...] -f pattern_file... [file...] 用法:grep [-r] [ -R] [-H] [-L] [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] pattern_list [文件...]
  • 好的,但它仍然无法识别参数 -o grep:不是识别标志:o
  • @Martin 您使用的是哪个操作系统?还可以在我更新的答案中尝试 pgrep 选项
  • aix 标签亮了。
【解决方案2】:

使用:

ps -ef | grep yypasswd | awk '{print $8}'

或使用 pgrep

pgrep -l yypasswd | awk '{print $2}'

【讨论】:

    【解决方案3】:

    解决方案

    ps -ef | grep yypasswd | awk '/yypasswd/{print $NF;}'
    

    【讨论】:

    • 你可能会失去grepps -ef | awk '/yypasswd/{print $NF}'
    • 不,我不能。当没有 grep 执行时,我什么都没有。我正在使用 Aix 操作系统。所以是ksh
    • 哦,对了。因为除了你的grep 之外,其他进程都没有yypasswd。我什至不会问为什么不只是echo yypasswd
    • 你的意思是这个进程没有激活吗?当我输入 ps -ef | grep yypasswd 我认为它会从活动进程中搜索我
    • 这太荒谬了。您使用 grep 搜索 yypasswd,然后将结果通过管道传输到 awk 以在您已经知道它存在时再次搜索 yypasswd,然后您使用 awk 打印您知道是 yypasswd 的行上的最后一个单词。您还使用ps 查找到 grep 的后续管道正在创建的进程,以便 yypasswd 将出现以供 grep 和 awk 查找。您可以将整个脚本缩减为echo 'yypasswd'。无论你真正想要做什么,这都不是办法。
    【解决方案4】:

    由于不清楚您要做什么:

    如果您期望以下输出:

    yypasswd
    

    然后做

    ps -ef | grep yypasswd | awk '{print $8}'
    

    如果你想要以下输出:

    testacc 25124194 2512312620   0 08:00:53  pts/0  0:00
    

    然后做

    ps -ef | grep yypasswd |  awk '{print $1, $2, $3, $4, $5, $6 ,$7}'
    

    希望有帮助。

    【讨论】:

    • 考虑对[y]ypasswd 进行grepping,如果这是您想要的实际 过程,否则您将面临grep yypasswd 的误报匹配(在问题中看到)的风险跨度>
    猜你喜欢
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    相关资源
    最近更新 更多