2011-06-14 114 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