我有一个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"/
}
答案 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"'