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

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

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


当前回答

使用ANSI-C引用字符串$'string'

您需要一个反斜杠转义的文字换行符来访问sed。 至少在bash中,$ "字符串将用真正的换行符替换\n,但随后您必须将sed看到的反斜杠加倍以转义换行符,例如:

echo "a,b" | sed -e $'s/,/\\\n/g'

注意,这并不适用于所有shell,但适用于最常见的shell。

其他回答

$ 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' {} \;

请改用tr:

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

适用于Mac OS X。

为了使它完整,也可以这样做:

echo "a,b" | sed "s/,/\\$(echo -e '\n\r')/"