2011-06-14 172 views
3

我有一個sed替換問題,希望你們其中一個能夠幫助我。我確信我缺少一些簡單的東西。Sed多行替換問題

所以我有一個包含文本和報價的文件。報價本身可以在一行或跨越多行。我想要一個新行的報價本身。此處作爲一例是該文件的一個例子

And he said "This too 
    shall pass" 

我需要改變這

And he said 
"This too shall pass" 

我嘗試下面的sed,但它沒有工作 - 這似乎符合正常的,但失敗了獲得新線

/"This/ { 
    N 
    s/"This *\n*too *\n*shall *\n*pass"/\n"This too shall pass"/ 
} 

回答

3

嘗試用\和一個顯式換行替換「\ n」;像下面 -

/"This/ { 
N 
s/"This *\n*too *\n*shall *\n*pass"/\ 
"This too shall pass"/ 
} 
2

首先加入所有行,然後通過tr插入新行的第一",然後傳球給空單一切(不是高興的tr部分...)

$ sed -e :a -e '$!N; s/\n/ /; ta ; s/"/\n"/' multiline_input | tr -s " " 
And he said 
"This too shall pass" 
2
perl -0777 -ne 's/\s+/ /g;s/"/\n"/;print "$_\n"' 
+0

照顧評選人的評論? – jm666 2011-06-16 09:20:59

+0

對不起,我的壞!瞄準了向上的箭頭,但我錯過了,而意外降低了投票。我怪我狡猾的mosepad。對於解釋,Thanx爲 – 2011-06-16 09:25:12

+0

。無論如何,np。 ;) – jm666 2011-06-16 09:26:25