我正在使用此引用: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'
不知道为什么我不能让这个工作。提前谢谢。
答案 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
选项的说明中,它表示扩展名不是可选的,如果您不想要扩展名,则必须指定一个空参数。所以一切都有意义!