如何在逗号后插入换行符,在`),(`用sed?

时间:2012-02-27 22:05:08

标签: regex sed

如何使用sed在),(逗号后插入换行符?

$ more temp.txt
(foo),(bar)
(foobar),(foofoobar)

$ sed 's/),(/),\n(/g' temp.txt 
(foo),n(bar)
(foobar),n(foofoobar)

为什么这不起作用?

4 个答案:

答案 0 :(得分:7)

sed在其替换命令中不支持\n转义序列,但是,如果你将它转义,它确实支持一个真正的换行符(因为sed命令应该只使用一个换行,然后转义告诉sed你真的想要一个换行符:

$ sed 's/),(/),\\
(/g' temp.txt
(foo),
(bar)
(foobar),
(foofoobar)

您还可以使用shell变量来存储换行符。

$ NL='
'
$ sed "s/),(/,\\$NL(/g" temp.txt
(foo),
(bar)
(foobar),
(foofoobar)

在Mac OS X Lion上测试,使用bash作为shell。

答案 1 :(得分:3)

您只需要使用反斜杠字符进行转义,然后在输入时按Enter键:

$ sed 's/),(/),\
(/g' temp.txt
(foo),
(bar)
(foobar),
(foofoobar)

答案 2 :(得分:2)

这对我有用:

$ echo "(foo),(bar)" | sed s/')','('/')',\\n'('/g
(foo),
(bar)

我正在使用:

  • GNU sed 4.2.2
  • GNU bash,版本4.3.48(1)-release(x86_64-pc-linux-gnu)

答案 3 :(得分:2)

好的,我知道这个问题很旧,但是我只好涉猎这个问题,以使sed接受\ n字符。我找到了一种可以在bash中工作的解决方案,在这里我要为遇到相同问题的其他人注意。

要重述此问题:请让sed接受反斜杠转义的换行符(或其他反斜杠转义字符)。

bash中的解决方法是使用:

$'\n'

在bash中,将$'\ n'字符串替换为真实的换行符。

您需要做的唯一另一件事是\ n两次转义,因为您必须转义斜杠本身。

将它们放在一起:

sed $'s/),(/),\\\n(/g' temp.txt
(foo),
(bar)
(foobar),
(foofoobar)

如果您希望它实际更改而不是打印出来,请使用-i

sed -i $'s/),(/),\\\n(/g' temp.txt