使用grep或类似的方法匹配多行

时间:2014-10-03 19:48:40

标签: regex perl

说我有一个包含以下文字的文件:

Line1
Cmd1
Cmd2
Cmd3
#
Line2
Cmd1
Cmd3
Cmd4
#

其中Line1是一个部分,后面是一些部分之间可能不同的配置,然后是一个#来分隔每个部分。

我知道我可以使用grep如下:

grep 'cmd2' file

匹配文件中的cmd2。但是,我只想匹配cmd2,如果它在Line1部分。使用-B是不可能的,因为部分之间可能有不同数量的配置。

感谢。

2 个答案:

答案 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以使匹配大小写不敏感。