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

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

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


当前回答

虽然我写这篇文章晚了,只是更新我的发现。这个答案只适用于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)

其他回答

虽然我写这篇文章晚了,只是更新我的发现。这个答案只适用于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)

macOS Mojave上的sed于2005年发布,因此一种解决方案是安装gnu-sed,

brew install gnu-sed

然后使用gsed就可以了,

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

如果你更喜欢sed,只需sudo sh -c 'echo /usr/local/opt/gnu-sed/libexec/gnubin > /etc/paths.D /brew',由brew info gnu-sed推荐。重新启动term,然后命令行中的sed为gsed。

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

...

在莫哈韦对我有用

显然\r是钥匙!

$ sed 's/, /\r/g' file3.txt > file4.txt

转换:

ABFS, AIRM, AMED, BOSC, CALI, ECPG, FRGI, GERN, GTIV, HSON, IQNT, JRCC, LTRE,
MACK, MIDD, NKTR, NPSP, PME, PTIX, REFR, RSOL, UBNT, UPI, YONG, ZEUS

:

ABFS
AIRM
AMED
BOSC
CALI
ECPG
FRGI
GERN
GTIV
HSON
IQNT
JRCC
LTRE
MACK
MIDD
NKTR
NPSP
PME
PTIX
REFR
RSOL
UBNT
UPI
YONG
ZEUS

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

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