55

我想使用该tr命令将所有出现的字符串“\n”替换为新行 (\n)。

我试过tr '\\n' '\n'了,但这似乎与任何 '\' 和任何 'n' 匹配

4

3 回答 3

86

以下是如何做到这一点sed

sed 's/\\n/\n/g'

示例用法:

\n要就地替换文件中所有出现的:

sed -i 's/\\n/\n/g' input_filename

\n通过管道替换所有出现的,并保存到另一个文件中

cat file1 file2 file3 file4 | sed 's/\\n/\n/g' > output_file
于 2012-11-28T17:56:14.563 回答
3

Perl 解决方案类似于sampson-chen的 sed 解决方案:

perl -pe 's/\\n/\n/g'

例子:

带有文字 \n 的输入文件(不是换行符):

$ cat test1.txt          
foo\nbar\n\nbaz

用实际的换行符替换所有出现的文字\n,打印到STDOUT

$ perl -pe 's/\\n/\n/g' test1.txt
foo
bar

baz

同样,就地更改输入文件,将备份保存到test1.txt.bak

$ perl -i.bak -pe 's/\\n/\n/g' test1.txt

Perl 单行器使用这些命令行标志:
-e:告诉 Perl 查找内联代码,而不是在文件中。
-p:一次循环输入一行,$_默认情况下将其分配给。print $_在每次循环迭代后添加。
-i.bak:就地编辑输入文件(覆盖输入文件)。在覆盖之前,通过在其名称后附加扩展名来保存原始文件的备份副本.bak

还请参见
perldoc perlrun::如何执行 Perl 解释器:命令行开关
perldoc perlre:Perl 正则表达式(正则表达式)

于 2020-10-02T23:02:32.277 回答
0

我有一个类似的问题,我想在 Mac BigSur 上用新行替换 '\n'

输入:

-----BEGIN CERTIFICATE-----\\nMIGcz......\naLRn\\nyxiJdo=\\n-----END CERTIFICATE-----

预期输出:

-----BEGIN CERTIFICATE-----
MIGcz......
aLRn
yxiJdo=
-----END CERTIFICATE-----

Sed,perl 都不适合我。但是一个简单的“tr”命令很有用。

echo -----BEGIN CERTIFICATE-----\\nMIGcz......\\naLRn\\nyxiJdo=\\n-----END CERTIFICATE----- | tr '\' '\n'
于 2021-05-22T07:17:02.217 回答