将字符串输入转义为 sed

将字符串输入转义为 sed

我在使用 sed 将文件中的字符串替换为包含换行符的字符串时遇到了一些问题。以下操作将完全失败。我假设我必须转义 replace_with 字符串,但我不知道该怎么做,或者这是否是最好的方法。任何帮助都将不胜感激

REPLACE_WITH="Blah
 de
 blah."

sed -i "s/TO_REPLACE/$REPLACE_WITH/g" file

答案1

这需要“双重转义”,但转义字符需要到达 sed 的“s”命令,因此它们也必须从 bash shell 中转义。(“三重转义”?)

REPLACE_WITH="Blah\\
de\\
blah."

sed -i "s/TO_REPLACE/$REPLACE_WITH/g" file

Bash 将“\\”解码为单个“\”,并将单个“\”放入发送命令中,然后 sed 命令将其解释为“\{newline}”,这表示换行符不会结束命令。

如果每行末尾只有一个 '\',bash 会看到 '\{newline}',并将其视为“无”,即:换行符和反斜杠被完全删除。

bash-sed-awk 的基本规则...如果您的反斜杠不起作用,请尝试再次将它们加倍...。

相关内容