【问题标题】:Remove newlines from string with tr使用 tr 从字符串中删除换行符
【发布时间】:2020-03-14 02:00:20
【问题描述】:

我有一个文件,其中包含带有换行符的字符串,如下所示:

{"name": "John\n\nMeyer"}
{"name": "Mary\n\nSmith"}

如何使用tr 工具删除它们?

我正在尝试,但输出不好:

$ cat f.json | tr -s '\\n\\n' ' '
{" ame": "Joh Meyer"}
{" ame": "Mary Smith"}

使用 Perl,同样的正则表达式可以正常工作:

$ cat f.json | perl -pe 's/\\n\\n/ /g'
{"name": "John Meyer"}
{"name": "Mary Smith"}

【问题讨论】:

  • 你不能。 tr 替换单个字符,而不是字符串。
  • 您确定\\n 是换行符而不是两个字符斜线\ 和n

标签: bash tr


【解决方案1】:

尝试使用tr-d 选项来删除字符:

tr -d \\n

把它们放在一起:

cat f.json | tr -d \\n

您不想要-s 选项。 tr-s 选项表示“挤压”。如果指定字符出现多次(留下一个),则 Squeeze 会删除它。

或者,为了避免不必要地使用 cat 和 pipe,您可以编写如下代码:

tr -d \\n <f.json

还有一点注意:如果您的输入确实没有换行符,而是有一个反斜杠后跟一个“en”,则不能使用tr 删除它们——tr 适用于单个字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 2011-10-13
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    相关资源
    最近更新 更多