在 MaxOSX 中使用 sed 时 \n 打印 n 而不是换行符

在 MaxOSX 中使用 sed 时 \n 打印 n 而不是换行符

当我使用时这是一个普遍问题sed,但当\n我在sed.这是我得到的一个例子sed

我的文件myfile包含以下内容:

1 2 3 4 5

当我使用这个时:

sed 's/ /\n/g' myfile

我明白了:

1n2n3n4n5

而不是得到这个:

1
2
3
4
5

有人知道问题出在哪里吗?

答案1

你正在使用OSX 10.8,所以你的sed工具是FreeBSD sed,不是GNU sed。所以FreeBSD sed不解释\n为换行符。

你可以试试:

$ sed 's/ /\'$'\n/g' myfile

$'\n/g'导致将bash字符串解释为标准转义扩展,因此在处理\n之前转换为换行符。sed

或使用tr代替sed

$ tr -s ' ' '\n' < myfile

答案2

Gnouc 很清楚原因,但\n在语句右侧指定 a 的可移植方法s///是:

s//\
/

但是您也可以从空白保留空间中将Gewline\n附加到模式空间的末尾,例如:

G

您也可以将y翻译运算符与\n右侧的 一起使用。所以你的...

sed 's/ /\n/g' myfile

...如果写成这样,就会达到您的预期...

sed 'y/ /\n/' myfile

...还有一个额外的优点,它可能也可以做到这一点微小的快一点。尽管 Gnouc 的tr解决方案可能还要快得多。

相关内容