如何使用sed在),(
逗号后插入换行符?
$ more temp.txt
(foo),(bar)
(foobar),(foofoobar)
$ sed 's/),(/),\n(/g' temp.txt
(foo),n(bar)
(foobar),n(foofoobar)
为什么这不起作用?
答案 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)
我正在使用:
答案 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