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

如何用“替换所有换行符”\";在使用sed的文本文件中?,sed,Sed,我有一个文本文件,它的行如下所示: Line1 Line2 Line3 Line1\nLine2\nLine3 我希望它看起来像这样: Line1 Line2 Line3 Line1\nLine2\nLine3 所以我尝试了这个命令: sed ':a;N;$!ba;s/\n/n /g' myfile.txt | tee output.txt 但是现在文件上的文字看起来像这样 Line1n Line2n Line3 正如评论中指出的,您必须用\\n替换\ns/\n/n/只插入一个文本n

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

Line1
Line2
Line3
Line1\nLine2\nLine3
我希望它看起来像这样:

Line1
Line2
Line3
Line1\nLine2\nLine3
所以我尝试了这个命令:

sed ':a;N;$!ba;s/\n/n /g' myfile.txt | tee output.txt
但是现在文件上的文字看起来像这样

Line1n Line2n Line3

正如评论中指出的,您必须用
\\n
替换
\n
s/\n/n/
只插入一个文本
n
,后跟一个空格,
s/\n/\n/
将被许多版本的sed解释为换行符,不会有任何更改

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

sed ':a;N;$!ba;s/\n/\\n/g' myfile.txt
您还可以使用
-z
选项来查找分隔行的NUL字符,这有效地使sed将整个文件作为一行加载(需要GNU sed):

不过,这确实会在文件的末尾追加
\n
。这在技术上是正确的,因为每个文件都应该以换行符结尾,但如果您不想换行,可以将其删除:

sed -z 's/\n/\\n/g;s/\\n$//' myfile.txt
另一种方法(概念上比使用
sed
的分支逻辑更简单)是将
tr
添加到混合中,前提是我们事先知道myfile.txt中没有类似“
#
”的字符:

输出:

Line1
Line2
Line3

您的替换文本应该是
\\n
而不是
n
@chepner谢谢!另外,如果您使用的是bash,则类似于
printf-v var“%q'”$(@user8481790:请对您的用例发表评论。我看不到任何实际的理由这样做,但我知道我看到了完全相同的问题(不是从您那里)最近两周出现在这里。您是否正在学习在线课程?您认为如何定义*nix文件中的行结尾?但是对于精心编制的Q(带有一些代码!gasp!);-)祝您好运。通常,如果您希望将行结尾保留为可变值,即
wholeFile=$(
,然后在使用变量时只需dbl引用它,即
echo“$wholeFile”
。祝你好运。我假设每一行都应该以
\n
结尾。
Line1
Line2
Line3