【问题标题】:Why SED command works on server but not with remote server?为什么 SED 命令适用于服务器但不适用于远程服务器?
【发布时间】:2019-10-03 21:21:46
【问题描述】:

我有一个 sed 命令,当我直接从服务器运行它时,它可以完美运行。但是当我尝试从另一台服务器运行它时,它似乎不想获取我所有的 sed 命令。

服务器红帽。我已经直接从服务器尝试了我的命令,该命令运行良好,但通过 shh 从另一台服务器却没有。

这是我的 ssh 命令:

ssh 'user@host' sudo -S -u webm sh -c "sed -i 's/^wrapper.java.additional.50=-agentpath:\"\/webmethods\/dynatrace/#wrapper.java.additional.50=-agentpath:\"\/webmethods\/dynatrace/g' /webmethods/eg_*/profiles/IS_default/configuration/custom_wrapper.conf"

我希望更改文件内容,但我收到了以下消息: sed: -e expression #1, char 54: `s' 的未知选项

最后,这将在 ksh 脚本中。

谢谢

【问题讨论】:

    标签: shell sed ssh ksh remote-server


    【解决方案1】:

    双引号本身会将\/ 解释为/,您需要使用双反斜杠来保留双引号中的转义。

    如果可能,将命令发送到 shell 的标准输入可能更容易:

    cat << EOF | ssh 'user@host' sudo -S -u webm sh
    sed -i 's/^wrapper.java.additional.50=-agentpath:"\/webmethods\/dynatrace/#wrapper.java.additional.50=-agentpath:"\/webmethods\/dynatrace/g' /webmethods/eg_*/profiles/IS_default/configuration/custom_wrapper.conf
    EOF
    

    另外,使用不同的分隔符来避免转义。您可以使用字符串中没有出现的任何字符:

    sed -i 's%^wrapper.java.additional.50=-agentpath:"/webmethods/dynatrace%#wrapper.java.additional.50=-agentpath:"/webmethods/dynatrace%g'
    

    还要注意. 匹配任何字符,但您可能不想匹配类似的字符串

    wrapperAjavaBadditionalC50=-agentpath:"/webmethods/dynatrace
    

    使用\.[.] 匹配文字点。

    【讨论】:

    • 谢谢,我将您的解决方案与 EOF 一起使用,效果很好;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多