说我有一个包含以下文字的文件:
Line1
Cmd1
Cmd2
Cmd3
#
Line2
Cmd1
Cmd3
Cmd4
#
其中Line1是一个部分,后面是一些部分之间可能不同的配置,然后是一个#来分隔每个部分。
我知道我可以使用grep如下:
grep 'cmd2' file
匹配文件中的cmd2。但是,我只想匹配cmd2,如果它在Line1部分。使用-B是不可能的,因为部分之间可能有不同数量的配置。
感谢。
答案 0 :(得分:3)
您可以将此awk
与自定义RS
:
awk -v RS=# -v ORS= '/Line1/ && /Cmd2/' file
Line1
Cmd1
Cmd2
Cmd3
答案 1 :(得分:0)
/s
标记可让您跨行匹配,因此您可能正在寻找类似
if ($line =~ /line1.*?cmd2/is) {
# do something here
}
我添加了/i
以使匹配大小写不敏感。