0
語法之間的匹配是這樣的:sed命令:2的正則表達式
sed -n '/Regex1/,/Regex2/p'
但是這包括regex1的和Regex2被發現的線,我該怎麼排除呢?
例如:
abcd-Regex1
BlaBlaBla
abcd-Regex2
然後我只想:BlaBlaBla
語法之間的匹配是這樣的:sed命令:2的正則表達式
sed -n '/Regex1/,/Regex2/p'
但是這包括regex1的和Regex2被發現的線,我該怎麼排除呢?
例如:
abcd-Regex1
BlaBlaBla
abcd-Regex2
然後我只想:BlaBlaBla
您可以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
感謝小費,但出於好奇:有沒有辦法做到這一點白色的'sed'命令? – 3sdmx 2010-10-29 15:05:33
不是我所知道的。這並不意味着它無法完成,只是我不知道該怎麼做。而且,鑑於使用'sed'而不是'awk'的系統是非常不尋常的,我寧願使用更適合這項工作的工具。 – paxdiablo 2010-10-29 15:08:31
無論如何,我會繼續搜索:) – 3sdmx 2010-10-29 15:10:19