たとえば、一致させたい:
文字列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 . . .
これを試してみてください:
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
でテスト済み)
Solaris11にはGNU egrepがあり、-Aまたは-Bを使用してコンテキスト行を提供できます。
または、GNU grep/egrepがない場合は、 http://www.intuitive.com/wicked/showscript)のcgrep
スクリプト。 cgi?036-cgrep.sh は、同様の機能を持つコンテキストgrepを提供します。
lltconfig -a list | awk 'BEGIN{n=0}/e1000g0/{n=NR}n&&NR>n&&NR<n+3{print}'