在bash中,如何搜索变量,然后在其上方显示行
我有这样一个文件:在bash中,如何搜索变量,然后在其上方显示行,bash,search,sed,Bash,Search,Sed,我有这样一个文件: multipath { wwid 3600507630bffc5e10000000000001048 alias mpath3 path_grouping_policy failover } 我想搜索mpath3,然后在上面输出wwid行。我需要这个来只输出我搜索的mpath的wwid。目前,它正在返回mpath3、MPATH34和35的值 i=mpath3 sed ":a;s/\n/&/2;tb;$!{N;ba};:b;/$i/!D;" /e
multipath {
wwid 3600507630bffc5e10000000000001048
alias mpath3
path_grouping_policy failover
}
我想搜索mpath3,然后在上面输出wwid行。我需要这个来只输出我搜索的mpath的wwid。目前,它正在返回mpath3、MPATH34和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和其他结果。这应该可以通过grep简单地解决,-B标志允许您在匹配之前提取上下文行:
grep -B1 "mpath3$" /etc/multipath.conf
注意,您需要$来排除mpath34和其他结果。使用awk:
awk -v s="mpath3" '$1=="wwid"{wwid=$2;next} $2==s{print wwid}' /etc/multipath.conf
3600507630bffc5e10000000000001048
使用awk:
awk -v s="mpath3" '$1=="wwid"{wwid=$2;next} $2==s{print wwid}' /etc/multipath.conf
3600507630bffc5e10000000000001048
您可以使用边界标记\b:
您可以使用边界标记\b:
哇,我让这条路变得比需要的更难了。非常感谢。哇,我让这条路变得比需要的更难了。非常感谢。