web-dev-qa-db-ja.com

Solaris 10 + grepによる一致後に2行を表示しますか?

たとえば、一致させたい:

文字列e1000glltconfig -a listから、文字列e1000g0の後の2行を表示します

だから私は行だけを取得します:

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

あと2行だけを取得する方法をアドバイスしてください。

(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 . . .
2
yael

これを試してみてください:

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でテスト済み)

2
Gilles Quenot

Solaris11にはGNU egrepがあり、-Aまたは-Bを使用してコンテキスト行を提供できます。

または、GNU grep/egrepがない場合は、 http://www.intuitive.com/wicked/showscript)のcgrepスクリプト。 cgi?036-cgrep.sh は、同様の機能を持つコンテキストgrepを提供します。

4
Tim Kennedy

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

0
aecolley