Solaris 10 + 通过 grep 匹配后显示 2 行?

Solaris 10 + 通过 grep 匹配后显示 2 行?

我想匹配例如:

字符串e1000g0来自lltconfig -a 列表 ,然后显示字符串 e1000g0 之后的两行

所以我只得到以下几行:

       Node   0 du1a      :   00:21:28:14:76:68
       Node   1 du1b      :   00:21:28:59:72:C4  permanent

请建议如何只得到两行之后?

来自( lltconfig -a list )的完整示例:

 lltconfig -a list
 Link 0 (e1000g0):
       Node   0 du1a      :   00:21:28:14:76:68
       Node   1 du1b      :   00:21:28:59:72:C4  permanent


 Link 1 (e1000g1):
       Node   0 du1a      :   00:21:28:14:76:69
       Node   1 du1b      :   00:21:28:59:72:C5  permanent


 Link21 (e1000g2):
       Node   0 du1a      :   00:21:28:14:76:49
       Node   1 du1b      :   00:21:28:59:72:A5  permanent

我也尝试过这个(但它只适用于linux,不适用于solaris -:(

       lltconfig -a list | grep -A 4 "e1000g0"  | grep -v "e1000g0"
       grep: illegal option -- A
       Usage: grep -hblcnsviw pattern file . . .

答案1

Solaris 11 有 GNU egrep,它可以使用 -A 或 -B 提供上下文行。

或者,如果您没有 GNU grep/egrep,则脚本cgrep位于http://www.intuitive.com/wicked/showscript.cgi?036-cgrep.sh提供具有类似功能的上下文 grep。

答案2

尝试这样做:

var='Link 0'
lltconfig -a list |
    awk '/'"$var"'/{l=1;next} /(^$)/{l=0} l==1  {print}'

如果您想要更一般的东西:

grep="pattern" # the string where we begin
max=4          # the number of lines after the matched pattern
awk '/'"$grep"'/{l=1;count=NR;next} l>0 && NR-count < '"$max"+1' {print}'

(测试于Solaris11

答案3

lltconfig -a list | awk 'BEGIN{n=0}/e1000g0/{n=NR}n&&NR>n&&NR<n+3{print}'

相关内容