2015-04-03 20 views
1
<<" 
72306735 
">> 

<<" 
72306735 35623130 
30000000 
">> 

<<" 
select * from emp 
where id=1 
">> 

提取對<<" ">>之間的內容預期輸出:如何在unix

72306735 
72306735 35623130 
30000000 
select * from emp  
where id=1 

我試圖與sed的像:

sed -n '/<<"/,/">>/p' script.txt 

輸出:

<<" 
72306735 
">> 
<<" 
72306735 35623130 
30000000 
">> 
<<" 
select * from emp 
where id=1 
">> 

請幫我解決這個問題

謝謝

回答

1

你已經差不多了。使用

sed -n '/<<"/,/">>/ { //! p; }' script.txt 

//嘗試再次嘗試最近嘗試的正則表達式。當用於如圖所示,最近嘗試的正則表達式是,確定如果當前行是圖案範圍/<<"/,/">>/的一部分的一個。在範圍的第一行中,即匹配第一行的模式,從此開始它將匹配最後一行。

實際結果是它匹配範圍的開始和結束行,所以//!p表示只有當前行不是其中之一時纔打印。

採用//不限於一個{}塊。你也可以寫

sed '/<<"/,/">>/!d; //d' script.txt 

其中/<<"/,/">>/!d刪除不屬於範圍的一部分的所有線路,並//d刪除邊界線,因爲//,在這一點上,該區域的第一個和最後一個行相匹配。