我有一个用逗号分隔的字符串文件。我正试着用新的一行替换逗号。我试过了:
sed 's/,/\n/g' file
但这并不奏效。我错过了什么?
我有一个用逗号分隔的字符串文件。我正试着用新的一行替换逗号。我试过了:
sed 's/,/\n/g' file
但这并不奏效。我错过了什么?
当前回答
如果sed的使用倾向于完全使用替换表达式(就像我的一样),您也可以使用perl -pe来代替
$ echo 'foo,bar,baz' | perl -pe 's/,/,\n/g'
foo,
bar,
baz
其他回答
为了使它完整,也可以这样做:
echo "a,b" | sed "s/,/\\$(echo -e '\n\r')/"
sed 's/,/\
/g'
适用于Mac OS X。
使用ANSI-C引用字符串$'string'
您需要一个反斜杠转义的文字换行符来访问sed。 至少在bash中,$ "字符串将用真正的换行符替换\n,但随后您必须将sed看到的反斜杠加倍以转义换行符,例如:
echo "a,b" | sed -e $'s/,/\\\n/g'
注意,这并不适用于所有shell,但适用于最常见的shell。
FWIW,下面的行工作在窗口和替换分号在我的路径变量换行。我正在使用安装在我的git bin目录下的工具。
echo %path% | sed -e $'s/;/\\n/g' | less
这适用于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”……