Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中,如何搜索变量,然后在其上方显示行_Bash_Search_Sed - Fatal编程技术网

在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:


哇,我让这条路变得比需要的更难了。非常感谢。哇,我让这条路变得比需要的更难了。非常感谢。