如果在linux中间的模式,两个字符串之间的grep

时间:2015-08-05 10:48:51

标签: regex linux awk sed grep

我想只在两个字符串之间存在模式时才在两个字符串之间进行grep。 例如,在本文中: 第一个想要的字符串是开始,第二个是END,并且模式在新行中每个都是1 2 3。

Start
abc
abc
1
2
3
abc
END
bla
bla
Start
abc
abc
1
2
4
abc
END
bla
bla
Start
abc
abc
1
2
3
abc
abc
END

结果应该是:

Start
abc
abc
1
2
3
abc
END

Start
abc
abc
1
2
3
abc
abc
END

谢谢!

2 个答案:

答案 0 :(得分:2)

sed -ne '/Start/{:a;N;/END/!b a;/\n1\n2\n3\n/p}'

逐行:

我们只需要以“开始”开头的文字:

sed -ne '/Start/{

我们找到了'开始',现在将所有内容添加到'END'到模式空间;

设置名为'a'的标签:

         :a

在模式空间中添加下一行:

         N

如果找不到'END' - 跳转到'a'

         /END/!b a

现在检查我们是否有所需的模式包含1 2 3并打印

它们将由'\ n'分隔,因为它们位于不同的行

         /\n1\n2\n3\n/p
         }'

答案 1 :(得分:0)

grep不合适,请改用sed

sed -n "/Start/,/END/p" input.txt

应该有效。我假设输入文件input.txt。