Почему команда SED работает на сервере, а не на удаленном сервере?

У меня есть команда sed, которая отлично работает, когда я запускаю сервер прямой формы. Но когда я пытался запустить его с другого сервера, кажется, что он не хочет получить всю мою команду sed.

Сервер RED HAT. Я пробовал напрямую с сервера мою команду, которая работает отлично, но с другого сервера через тссс это не так.

Вот моя команда с 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, char 54: неизвестная опция для `s '

В конце это будет в сценарии ksh.

Спасибо

Всего 1 ответ


Двойные кавычки сами интерпретируют / as / , вам нужно удвоить обратную косую черту, чтобы сохранить экранирование в двойных кавычках.

Если возможно, может быть проще отправить команду на стандартный ввод оболочки:

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

Используйте . или [.] чтобы соответствовать буквальной точке.


Есть идеи?

10000