【问题标题】:Extract value from result Linux从结果中提取值 Linux
【发布时间】:2013-10-25 14:22:34
【问题描述】:

我有一个 Linux 命令行来显示某个结果。从结果中,我想对其进行 grep 或使用 awk 来提取特定值。这是命令行的结果:

OK 0 seconds over max, 0 active processes, next process in the future|'overmax'=0s;300;600 'active'=0 'nextoldest'=-1153s

我只想在 'active'=? 之后显示值?在这种情况下是 0

【问题讨论】:

    标签: linux ubuntu awk grep nagios


    【解决方案1】:

    试试这个 grep 行:

    grep -Po "'active'=\K\S*"
    

    【讨论】:

    • 太棒了,成功了。就这样我明白了,你能解释一下正则表达式吗
    • @Chelseawillrecover -P PCRE, -o only, \S* 'active'= 之后的所有非空字符\K 会在后面看正面,但动态长度。
    【解决方案2】:

    你可以像这样使用 egrep :

    egrep -o "'active'=[^\ ]+"
    

    例子:

    [ ~]$ str="OK 0 seconds over max, 0 active processes, next process in the future|'overmax'=0s;300;600 'active'=0 'nextoldest'=-1153s"
    [ ~]$ echo $str|egrep -o "'active'=[^\ ]+"
    'active'=0
    [ ~]$ 
    

    如果你确定正确的值是数字,你可以像这样进一步限制模式:

    egrep -o "'active'=[0-9]+"
    

    你也可以使用 sed:

    [ ~]$ echo $str|sed "s/.*\('active'=[^\ ]*\).*/\1/g"
    'active'=0
    

    如果你只想获得正确的价值:

    [ ~]$ echo $str|sed "s/.*'active'=\([^\ ]*\).*/\1/g"
    0
    

    您也可以使用 awk,但我认为在这种情况下这不是更好的解决方案。但只是为了好玩:

    [ ~]$ echo $str|awk -F " " '{for (i=1; i <= NF; i++){if($i ~ ".?active.?="){print $i}}}'
    'active'=0
    

    注意:egrep 相当于 grep 的“-E”选项。

    【讨论】:

      【解决方案3】:

      另一个gnu awk

      awk '{print gensub(/.*active.=(.*) .*/,"\\1","g")}' file
      0
      

      【讨论】:

        【解决方案4】:
        awk '{ match($0,/'active'=(.*) /,a); print a[1]}' file
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-09-09
          • 1970-01-01
          • 1970-01-01
          • 2016-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多