2010-10-29 203 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