如何保持第一个参数并根据是否满足其他参数进行打印?

时间:2018-03-05 16:15:45

标签: bash shell

我有一个脚本问题。我有一个shell命令,产生下面的输出。请注意,这里只有一个,但实际上有很多结果。

NAME   | xpr          : SEVERITY
       | xxpr         : 000
       | clavv        :
       | clfic        :
       | name         :
       | domain       : V
       | azzl         : U_
       | utt          : WFH
       | info         :
       | sev          : 0005

所以,我的目标是在NAME的行上获取它的实际名称,即SEVERITY。但是,我只想打印它,如果该线" sev"如果没有,请不要打印名称。任何指导都将不胜感激。

谢谢

3 个答案:

答案 0 :(得分:2)

以下命令在假设NAMEsev属性之间总共有十行的情况下工作。

yourCommand | grep -B10 -Ew 'sev *: *0005' | grep -Pow 'NAME *\| *xpr *: *\K.*'

第一部分提取以sev : 0005结尾的十行块。第二部分从这些块中提取名称(在您的示例中为SEVERITY)。

答案 1 :(得分:1)

这适用于Bash:

[[ ! -z " $( grep -E 'sev *: *0005' test.txt ) "   ]] && grep -E '^NAME' test.txt | awk -F':' '{ print $2}'

问候!

答案 2 :(得分:1)

如果' NAME'之间的距离和' sev'没有固定你必须两次grep

a=$(yours_shell_command); echo "$a" | grep -q 'sev *: 0005' && echo "$a" | grep 'NAME' | sed 's/.*: //'