我有一个这样的文件:
multipath {
wwid 3600507630bffc5e10000000000001048
alias mpath3
path_grouping_policy failover
}
我想搜索mpath3然后输出它上面的wwid行。我需要这个只输出我搜索的mpath的wwid。目前它返回mpath3和mpath 34和35的值。
i=mpath3
sed ":a;s/\n/&/2;tb;$!{N;ba};:b;/$i/!D;" /etc/multipath.conf)
输出:
multipath { wwid 3600507630bffc5e10000000000001118 alias mpath3 multipath { wwid 3600507630bffc5e10000000000001047 alias mpath34 multipath { wwid 3600507630bffc5e10000000000001048 alias mpath35 } }
答案 0 :(得分:3)
这应该只用grep解决(-B
标志允许你在匹配前提取上下文行):
grep -B1 "mpath3$" /etc/multipath.conf
请注意,您需要$
排除mpath34
和其他结果。
答案 1 :(得分:1)
您可以使用边界标记\b
:
sed ':a;s/\n/&/2;tb;$!{N;ba};:b;/\b'"$i"'\b/!D;' /etc/multipath.conf
答案 2 :(得分:1)
awk '/mpath3/{print wwid} {wwid=$2}' file
答案 3 :(得分:0)
使用awk:
awk -v s="mpath3" '$1=="wwid"{wwid=$2;next} $2==s{print wwid}' /etc/multipath.conf
3600507630bffc5e10000000000001048