在 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'
很重要,如图所示。
我正在尝试用文件中的 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'
很重要,如图所示。