我想只在两个字符串之间存在模式时才在两个字符串之间进行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
谢谢!
答案 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。