使用sed命令:匹配2个正则表达式

时间:2010-10-29 14:54:19

标签: regex

这个的语法是:

sed -n '/Regex1/,/Regex2/p'

但这包括找到Regex1和Regex2的行,我该如何排除它们?

例如:

abcd-Regex1

BlaBlaBla

abcd-Regex2

然后我只想:BlaBlaBla

1 个答案:

答案 0 :(得分:0)

您可以使用awk中的简单状态机执行此操作:

pax> echo 'abcd-Regex1
BlaBlaBla
abcd-Regex2' | awk '/Regex2/{e=0}{if(e){print}}/Regex1/{e=1}'

BlaBlaBla

它基本上使用了一个echo标志e,下面的命令按行顺序执行:

  • /Regex2/{e=0}在找到终止线路时关闭回声。
  • 如果启用了回音,则
  • {if(e){print}}打印行。
  • /Regex1/{e=1}在初始化线路时启用回音。

如果您必须仅使用sed,则 可以通过将其传递到另一个sed以删除开始来实现和结束行:

pax> echo 'asdf
abcd-Regex1
BlaBlaBla
abcd-Regex2' | sed -n '/Regex1/,/Regex2/p' | sed -e '/Regex1/d' -e '/Regex2/d'

BlaBlaBla