\ n在sed的MacOS外壳上不起作用

时间:2019-01-14 11:29:31

标签: linux shell sed newline

也许这是一个愚蠢的问题,但我真的无法解决。

我只想用此代码用换行替换每个空格。

echo "300.000" | sed 's/[.:;,"]/ & /g' | sed 's/ /\n/g'

但是结果是这样的:

300n.n000

我的同事说这应该工作。我在Mac上有什么区别吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,sed中的换行符并未完全标准化。在MacOS上,可以进行以下操作:

echo "300.000" | sed 's/[.:;,"]/\
&\
/g'

(是的,这些是单引号内的文字反斜杠换行符。)

\n工作的那些平台上,您可以简化为

echo "300.000" | sed 's/[.:;,"]/\n&\n/g'

如果要替换所有空格,tr是可移植的解决方案:

echo "300.000" | sed 's/[.:;,"]/ & /g' | tr ' ' '\012'

一个更简洁的解决方案可能是使用Perl,它不是完全标准化的 ,而仅存在于单个实现中,因此无论安装了Perl的哪个地方都可以有效地移植:

echo "300.000" | perl -pe 's/[.:;,"]/\n$&\n/g'