没有给我正确的替代操作与Mac换行 - GNU sed和BSD / OSX sed之间的差异

时间:2014-06-17 23:54:20

标签: macos sed gnu bsd

我正在使用此引用:sed help: matching and replacing a literal "\n" (not the newline)

我有一个文件“test1.txt”,其中包含一个字符串hello \ ngoodbye

我使用此命令搜索并用实际换行符替换“\ n”:

sed -i '' 's/\\n/\n/g' test1.txt

但结果是: hellongoodbye 。 它只是将“\ n”替换为“n”而不是实际的新行。这与/ t相同,它会留下“t”而不是标签。

''代表MAC中的未定义错误:http://mpdaugherty.wordpress.com/2010/05/27/difference-with-sed-in-place-editing-on-mac-os-x-vs-linux/

更新

我已经尝试了@ hek2mgl建议的两个命令:

sed -i 's/\\n/\n/g' test.txt
# Or:
sed -i'' 's/\\n/\n/g' test.txt

虽然它们可能适用于Linux,但使用MAC OS时出现以下错误:

sed: 1: "test1.txt": undefined label 'est1.txt'

不知道为什么我不能让这个工作。提前谢谢。

1 个答案:

答案 0 :(得分:5)

这看起来有点奇怪,但请尝试:

sed -i '' 's/\\n/\
/g' test1.txt

即,使用实际换行符而不是\n

解释是你有一个奇怪的sed! 有关详细信息,请参阅mac sed手册:https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/sed.1.html

s命令的描述中,它说:

A line can be split by substituting a newline character into it.  To specify
a newline character in the replacement string, precede it with a backslash.

此外,在-i选项的说明中,它表示扩展名不是可选的,如果您不想要扩展名,则必须指定一个空参数。所以一切都有意义!