tr命令 - 如何用实际换行符替换字符串"\n"(\n)

Ala*_*air 36 linux gnu tr

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

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

sam*_*hen 59

以下是如何使用sed:

sed 's/\\n/\n/g'
Run Code Online (Sandbox Code Playgroud)

用法示例:

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

sed -i 's/\\n/\n/g' input_filename
Run Code Online (Sandbox Code Playgroud)

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

cat file1 file2 file3 file4 | sed 's/\\n/\n/g' > output_file
Run Code Online (Sandbox Code Playgroud)

  • 这对我在OS X上的bash 3上不起作用.它用n替换\n. (19认同)
  • @rjurney 你需要 GNU 版本的 `sed` 才能工作。`brew install gnu-sed` 然后使用 `gsed` 命令或设置 `$PATH` 以便 GNU 版本优先:/sf/answers/2437116881/ (3认同)

Tim*_*and 5

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

perl -pe 's/\\n/\n/g'
Run Code Online (Sandbox Code Playgroud)

例子:

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

$ cat test1.txt          
foo\nbar\n\nbaz
Run Code Online (Sandbox Code Playgroud)

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

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

baz
Run Code Online (Sandbox Code Playgroud)

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

$ perl -i.bak -pe 's/\\n/\n/g' test1.txt
Run Code Online (Sandbox Code Playgroud)

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

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