繁体   English   中英

在bash中,我如何搜索变量,然后在其上方显示行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM