2010-10-29 145 views
0

语法之间的匹配是这样的:sed命令:2的正则表达式

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

但是这包括regex1的和Regex2被发现的线,我该怎么排除呢?

例如:

abcd-Regex1 

BlaBlaBla 

abcd-Regex2 

然后我只想:BlaBlaBla

回答

0

您可以awk用一个简单的状态机做到这一点:

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

BlaBlaBla 

它主要采用回波标识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 
+0

感谢小费,但出于好奇:有没有办法做到这一点白色的'sed'命令? – 3sdmx 2010-10-29 15:05:33

+0

不是我所知道的。这并不意味着它无法完成,只是我不知道该怎么做。而且,鉴于使用'sed'而不是'awk'的系统是非常不寻常的,我宁愿使用更适合这项工作的工具。 – paxdiablo 2010-10-29 15:08:31

+0

无论如何,我会继续搜索:) – 3sdmx 2010-10-29 15:10:19