我有一个sed命令,当我直接在服务器上运行它时,它可以完美运行。但是,当我尝试从另一台服务器运行它时,似乎并不想获取我所有的sed命令。
服务器红帽。我已经从服务器上直接尝试了我的命令,该命令运行正常,但是通过另一台服务器却没有尝试过。
这是我的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脚本中。
谢谢
答案 0 :(得分:2)
双引号本身会将\/
解释为/
,您需要双反斜杠以将转义保留为双引号。
如果可能的话,将命令发送到shell的stdin可能会更容易:
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
使用\.
或[.]
来匹配文字点。