我想匹配例如:
字符串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}'