【问题标题】:using sed to replace a line with back slashes in a shell script使用 sed 在 shell 脚本中用反斜杠替换一行
【发布时间】:2015-08-30 22:35:22
【问题描述】:

我正在尝试用文件中的 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\

【问题讨论】:

  • 您的确切输入和预期输出是什么?
  • @AvinashRaj 我已经用预期的输入和输出修改了问题
  • nescoffe 3 for (in) 1 ,用于反斜杠

标签: regex bash shell ssh sed


【解决方案1】:

您可以将它与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',如图所示。

【讨论】:

  • 嘿@anubhava,不知道引用'EOF'。谢谢!
【解决方案2】:

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

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

这是一大堆反斜杠,但它成功了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2016-08-08
    • 2011-12-13
    • 2012-04-14
    • 2015-08-29
    • 2013-11-04
    • 1970-01-01
    相关资源
    最近更新 更多