在 shell 脚本中使用 sed 替换带有反斜杠的行

using sed to replace a line with back slashes in a shell script

我正在尝试用文件中的 sed 替换这两行的底部。

    <rule>out_prefix=orderid ^1\d\+ updatemtnotif/</rule>\n\
    <rule>out_prefix=orderid ^2\d\+ updatemtnotif/</rule>\n\

下面的命令似乎在 bash 提示符

下作为命令执行时执行此操作
sed -i 's@out_prefix=orderid ^2\\d\+ updatemtnotif/@out_prefix=orderid ^2\\d\+ updatemtnotif_fr/@g' /opt/temp/rules.txt

但是,当我尝试使用此处的文档通过 ssh 远程执行相同的命令时,该命令无法修改文件。 我认为这可能是一个逃避问题,但我没有运气尝试以多种方式修改命令。谁能告诉我我应该怎么做才能让它通过 ssh 工作?提前致谢!

澄清,

input: <rule>out_prefix=orderid ^2\d\+ updatemtnotif/</rule>\n\
output: <rule>out_prefix=orderid ^2\d\+ updatemtnotif_fr/</rule>\n\

我设法修复了它。必须转义我在 shell 脚本中使用的命令中的反斜杠。

 's@out_prefix=orderid ^2\\\\d\\+ updatemtnotif/@out_prefix=orderid ^2\\\\d\\+ updatemtnotif_fr/@g' /opt/temp/rules.txt

那是一大堆反斜杠,但它起到了作用。

您可以像这样将它与 ssh 和 heredoc 一起使用:

ssh -t -t user@localhost<<'EOF'
sed 's~out_prefix=orderid ^2\\d\+ updatemtnotif/~out_prefix=orderid ^2\\d\+ updatemtnotif_fr/~' ~/path/to/file
exit
EOF

PS: 引用 'EOF' 很重要,如图所示。