[英]In bash how do I search for a variable then display the line above it
我有一个像这样的文件:
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 } }
这应该可以通过grep轻松解决( -B
标志允许您在匹配之前提取上下文行):
grep -B1 "mpath3$" /etc/multipath.conf
请注意,您需要使用$
来排除mpath34
和其他结果。
您可以使用边界标记\\b
:
sed ':a;s/\n/&/2;tb;$!{N;ba};:b;/\b'"$i"'\b/!D;' /etc/multipath.conf
awk '/mpath3/{print wwid} {wwid=$2}' file
使用awk:
awk -v s="mpath3" '$1=="wwid"{wwid=$2;next} $2==s{print wwid}' /etc/multipath.conf
3600507630bffc5e10000000000001048
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.