【问题标题】:Append specific caracter at the end of each line在每行末尾附加特定字符
【发布时间】:2021-09-01 02:44:35
【问题描述】:

我有一个文件,我想在其每一行的末尾附加一个特定的文本 \0A

我用过这个命令,

sed -i s/$/\0A/ file.txt

但这不适用于反斜杠\0A

【问题讨论】:

  • sed -i 's/$/\\0A/' file.txt ?
  • 不,只添加A
  • 还要注意你没有在s/$/\0A/周围使用引号,所以shell会解释反斜杠

标签: sed escaping substitution string-substitution


【解决方案1】:

在其默认操作中,sed 循环地将输入中的一行添加到 sed 的模式空间中,而不是终止 字符。

OP 想要使用sed 在行尾追加字符\0A。这是 字符的十六进制表示(cfr.http://www.asciitable.com/)。因此,从这个角度来看,OP 尝试将文件空间加倍。这可以通过以下方式轻松完成:

sed G file

G 命令在模式空间中附加一个换行符,后跟保持空间的内容。由于保持空间总是空的,它只是将换行符附加到模式空间。 sed 的默认操作是打印该行。所以这只是将文件加倍。

【讨论】:

    【解决方案2】:

    您的命令应该通过简单地将 s/$/\0A/ 括在单引号 (') 转义反斜杠(使用另一个反斜杠)来修复:

    sed -i 's/$/\\0A/' file.txt
    

    请注意,周围的's 保护该字符串不被 shell 处理,但 bashslash 仍需要转义以保护它来自 SED 本身。

    显然,如果你转义足够多,仍然可以避免使用单引号:

    sed -i s/$/\\\\0A/ file.txt
    

    在这种情况下,没有单引号来保护字符串,因此我们需要在 shell 中写入 \\ 以使 SED 输入 \,但我们需要其中两个 \\,即 \\\\,这样 SED 就会得到 \\,这是一个转义的 \

    显然,我永远不会建议第二种选择。

    【讨论】:

      猜你喜欢
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多