我有一个脚本问题。我有一个shell命令,产生下面的输出。请注意,这里只有一个,但实际上有很多结果。
NAME | xpr : SEVERITY
| xxpr : 000
| clavv :
| clfic :
| name :
| domain : V
| azzl : U_
| utt : WFH
| info :
| sev : 0005
所以,我的目标是在NAME的行上获取它的实际名称,即SEVERITY。但是,我只想打印它,如果该线" sev"如果没有,请不要打印名称。任何指导都将不胜感激。
谢谢
答案 0 :(得分:2)
以下命令在假设NAME
和sev
属性之间总共有十行的情况下工作。
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/.*: //'