regex - 如果模式在中间 linux 中,则在两个字符串之间进行 grep

标签 regex linux awk sed grep

我只想在两个字符串之间进行 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/

相关文章:

regex - 正则表达式 : how to ignore rest of the line

windows - 用于 Linux 的 Delphi 交叉编译器

linux - 使用标志 DIRECTORY 和 O_CREAT 打开的不直观行为

linux - 配置多节点 hadoop 安装

bash - awk 或 Sed : Replace text between special characters (delimiters)

linux - cat pipe awk 操作与文件上 awk 命令的比较

regex - 正则表达式模式

javascript - 如何在 Javascript 中从字符串的开头和结尾 trim 所有非字母数字字符?

java - Java中的字符串替换

awk - 如何在运行程序时在某个文件上运行 awk 脚本而不输入文件名