【问题标题】:tr command - how to replace the string "\n" with an actual newline (\n) [closed]tr 命令 - 如何用实际的换行符(\n)替换字符串“\n”[关闭]
【发布时间】:2012-11-16 15:11:07
【问题描述】:

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

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

【问题讨论】:

  • 正如@Aniket 指出的那样,tr 对此不起作用 - 它用单个字节替换单个字节并且不能处理多字节字符串(“\n”)。您需要sedawk 或其他工具来完成此操作。

标签: linux gnu tr


【解决方案1】:

以下是使用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

【讨论】:

  • 这对我在 OS X 上的 bash 3 上不起作用。它将 \n 替换为 n。
  • @rjurney 您需要 GNU 版本的 sed 才能工作。 brew install gnu-sed 然后使用gsed 命令或设置$PATH 以便GNU 版本优先:stackoverflow.com/a/34815955/3316036
  • Bash 版本没有区别,但 sed 版本有区别。不幸的是,非便携版本被接受了。
  • 查看建议的副本以了解可移植性说明和一些可移植替代方案。
【解决方案2】:

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: how to execute the Perl interpreter: command line switches
perldoc perlre: Perl regular expressions (regexes)

【讨论】:

    【解决方案3】:

    我有一个类似的问题,我想在 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'
    

    【讨论】:

    • 这是坏的,它用换行符替换\ ,并留下n
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2014-10-16
    • 2011-09-18
    相关资源
    最近更新 更多