在每行末尾附加特定字符

时间:2021-06-16 09:30:24

标签: sed escaping substitution string-substitution

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

我用过这个命令,

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

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

2 个答案:

答案 0 :(得分:2)

在其默认操作中,sed 循环地将输入中的一行(减去终止 字符)附加到 sed 的模式空间中。

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

sed G file

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

答案 1 :(得分:1)

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

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

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

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

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

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

显然要采取行动,我永远不会建议第二种选择。