我有一个用逗号分隔的字符串文件。我正试着用新的一行替换逗号。我试过了:

sed 's/,/\n/g' file

但这并不奏效。我错过了什么?


当前回答

$ echo $PATH | sed -e $'s/:/\\\n/g' 
/usr/local/sbin
/Library/Oracle/instantclient_11_2/sdk
/usr/local/bin

...

在莫哈韦对我有用

其他回答

如果sed的使用倾向于完全使用替换表达式(就像我的一样),您也可以使用perl -pe来代替

$ echo 'foo,bar,baz' | perl -pe 's/,/,\n/g'
foo,
bar,
baz

这适用于MacOS Mountain Lion (10.8), Solaris 10 (SunOS 5.10)和RHE Linux (Red Hat Enterprise Linux Server release 5.3, Tikanga)……

$ sed 's/{pattern}/\^J/g' foo.txt > foo2.txt

... 这里的^J是通过ctrl+v+ J完成的。注意^J前面的\。

另外,我知道RHEL的sed是GNU的,MacOS的sed是基于FreeBSD的,虽然我不确定Solaris的sed,但我相信这对任何sed都适用。YMMV tho”……

虽然我写这篇文章晚了,只是更新我的发现。这个答案只适用于Mac OS X。

$ sed 's/new/
> /g' m1.json > m2.json
sed: 1: "s/new/
/g": unescaped newline inside substitute pattern

在上面的命令中,我尝试用Shift+Enter添加新行,但没有工作。所以这一次我尝试了“转义”的“未转义换行”,因为错误告诉。

$ sed 's/new/\
> /g' m1.json > m2.json 

成功了!(适用于Mac OS X 10.9.3)

$ echo $PATH | sed -e $'s/:/\\\n/g' 
/usr/local/sbin
/Library/Oracle/instantclient_11_2/sdk
/usr/local/bin

...

在莫哈韦对我有用

我发现了另一个同样有效的命令。

find your_filename.txt -type f -exec sed -i 's/,/\n/g' {} \;