我只想在两个字符串之间进行 grep,前提是它们之间存在某种模式。 例如,在本文中: 第一个想要的字符串是 Start,第二个是 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
谢谢!
最佳答案
sed -ne '/Start/{:a;N;/END/!b a;/\n1\n2\n3\n/p}'
逐行:
我们只需要以 'Start' 开头的文本:
sed -ne '/Start/{
我们找到了“开始”,现在将所有内容添加到“结束”到模式空间;
设置名为“a”的标签:
:a
将下一行添加到模式空间:
N
如果没有找到 'END' - 跳转到 'a'
/END/!b a
现在检查我们是否有包含 1 2 3 的所需模式并打印
它们将被'\n'分隔,因为它们在不同的行上
/\n1\n2\n3\n/p
}'
关于regex - 如果模式在中间 linux 中,则在两个字符串之间进行 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31830369/