Sed多线更换问题

时间:2011-06-14 22:15:53

标签: sed multiline replace

我有一个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 个答案:

答案 0 :(得分:3)

尝试用\替换“\ n”和显式换行;如下 -

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

答案 1 :(得分: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 :(得分:2)

perl -0777 -ne 's/\s+/ /g;s/"/\n"/;print "$_\n"'