【问题标题】:Remove everything from output till to defined var从输出中删除所有内容,直到定义的 var
【发布时间】:2014-11-17 08:42:30
【问题描述】:

在 ps 命令中,我希望在这种情况下定义一些 var,然后定义“PS1”,然后删除该 var 之前的所有内容。

例如:

ps -ef | grep -i PS1
cbsuser 1138700       1   0   Sep 15      -  0:10 ./PS1 PS01 3

预期输出:

./PS1 PS01 3

在我看来这是错误的:

sed 's/^$/ "PS1"/g'

或相关的我不知道如何完成它。

【问题讨论】:

  • ps -ef 并不总是返回相同的结构(日期和日期取决于多长时间)。 PS1 也可以在进程的用户名或参数中找到。 PS1 可以从多种方式/路径开始)。对于这种情况,我们可以假设什么?

标签: bash perl awk sed grep


【解决方案1】:
ps -ef | perl -lne 'print $1 if /(\S* PS1 .*)/xi'

【讨论】:

    【解决方案2】:

    您可以使用ps 的自定义格式来只输出您需要的内容,因此您只需要在列表中过滤所需的命令:

    ps e --format %a | grep PS1
    

    或者甚至更好地使用pgrep,如果它可用的话:

    pgrep -fl PS1 | cut -f2- -d' '
    

    【讨论】:

      【解决方案3】:

      几个选项。这些都解析你的命令。更好的方法是使用pgrepo 选项ps 但如果你真的想解析:

      1. grep 本身

        ps -ef | grep -Po 'PS1.*'
        
      2. perl

        ps -ef | grep -i PS1 | perl -pe 's/.*(?=PS1)//' 
        
      3. sed

        ps -ef | sed 's/.*\(PS1.*\)/\1/' 
        

      【讨论】:

        【解决方案4】:
        ps -ef | grep -i PS1| awk '{ for(i=9;i<=NF;++i)printf "%s ",$i }
        

        【讨论】:

          【解决方案5】:

          你可以用这个,

          ps -eo cmd | grep 'PS1'
          

          【讨论】:

            【解决方案6】:
            ps -ef | grep -i PS1| grep -v grep| awk '{print $(NF-2)" "$(NF-1)" "$NF}'
            

            【讨论】:

              【解决方案7】:

              您可以使用pgrep 进行简化:

               pgrep -fl PS1 | cut -d ' ' -f2-
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-06-13
                • 2018-09-04
                • 2018-01-29
                • 2014-03-26
                相关资源
                最近更新 更多