如何使用sed在文本文件中用“ \ n”替换所有换行符?

时间:2018-11-16 16:44:42

标签: sed

我有一个文本文件,其行如下所示:

Line1
Line2
Line3

我希望它看起来像这样:

Line1\nLine2\nLine3

所以我尝试了以下命令:

sed ':a;N;$!ba;s/\n/n /g' myfile.txt | tee output.txt

但是现在文本在文件上看起来像这样。

Line1n Line2n Line3

2 个答案:

答案 0 :(得分:1)

如评论中所指出,您必须用\\n代替\ns/\n/n /只会插入文字n,后跟一个空格,而s/\n/\n/会被许多版本的sed解释为换行符,并且不会改变。

而不是像将整个文件循环加载到模式空间一样

sed ':a;N;$!ba;s/\n/\\n/g' myfile.txt

您还可以使用-z选项来查找NUL字符以分隔行,这实际上使sed可以将整个文件加载为一行(需要GNU sed):

sed -z 's/\n/\\n/g' myfile.txt

这确实将\n附加在文件的末尾。从技术上讲这是正确的,因为每个文件都应该以换行符结尾,但是如果您不希望这样做,可以将其删除:

sed -z 's/\n/\\n/g;s/\\n$//' myfile.txt

答案 1 :(得分:0)

另一种方式(从概念上讲,比使用sed的分支逻辑更简单)是将tr添加到混合中,前提是我们事先知道有一些像“ #”这样的字符在 myfile.txt 中的 not

# make a 'myfile.txt' for convenience.
printf 'Line%s\n' 1 2 3 > myfile.txt
tr '\n' '#' < myfile.txt | sed 's/#/\\n/g'

演示,它将其输入反馈回printf

printf "$(tr '\n' '#' < myfile.txt | sed 's/#/\\n/g')"

输出:

Line1
Line2
Line3