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

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

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


当前回答

MacOS是不同的,有两种方法来解决这个问题与mac的sed

首先,使用\'$'\n "替换\n,它可以在MacOS中工作: Sed 's/,/\'$'\n " /g'文件 第二,使用空行: sed的s /, / \ / g的文件 Ps.注意用'分隔的范围 第三,使用gnu-sed代替mac-sed

其他回答

只是为了澄清:OSX上sed的手册页(10.8;达尔文内核版本12.4.0)说:

[…]

Sed正则表达式

 The regular expressions used in sed, by default, are basic regular expressions (BREs, see re_format(7) for more information), but extended
 (modern) regular expressions can be used instead if the -E flag is given.  In addition, sed has the following two additions to regular
 expressions:

 1.   In a context address, any character other than a backslash (``\'') or newline character may be used to delimit the regular expression.
      Also, putting a backslash character before the delimiting character causes the character to be treated literally.  For example, in the
      context address \xabc\xdefx, the RE delimiter is an ``x'' and the second ``x'' stands for itself, so that the regular expression is
      ``abcxdef''.

 2.   The escape sequence \n matches a newline character embedded in the pattern space.  You cannot, however, use a literal newline charac-
      ter in an address or in the substitute command.

[…]

所以我想一个人必须使用tr -如上所述-或者nitty

sed "s/,/^M
/g"

注意:你必须输入<ctrl>-v,<return>才能在vi编辑器中得到'^M'

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

...

在莫哈韦对我有用

请改用tr:

tr , '\n' < file

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

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

适用于Mac OS X。