为什么 SED 命令在服务器上有效,但在远程服务器上无效?

Why SED command works on server but not with remote server?

我有一个 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 表达式 #1,字符 54:`s' 的未知选项

最后,这将在 ksh 脚本中。

谢谢

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

如果可能,将命令发送到 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

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