在bash中如何搜索变量然后显示它上面的行

时间:2014-02-06 13:32:12

标签: bash search sed

我有一个这样的文件:

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 } }

4 个答案:

答案 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