Можно использовать
sed -i -e 's/\$\$file_name=.*/&V1/' file.txt
Я думаю, ваша локальная оболочка удаляет ваши кавычки. Вы можете попробовать
ssh remote sh -c '"echo hi > hi.txt"'
. Когда вы отправляете удаленные команды с помощью ssh, есть две оболочки, участвующие в чтении каждой отправленной строки. Ваша локальная оболочка и ваша удаленная оболочка.
Хорошее объяснение этого можно найти в Цитата на оболочку Unix / Linux для удаленных оболочек
Это, вероятно, самая запутанная и раздражающая вещь при работе с ssh (по крайней мере, на мой взгляд).
Причина такого поведения в том, что ssh не сохраняет аргументы при выполнении удаленной команды. Он берет все ваши аргументы и объединяет их вместе, разделенные пробелами.
Итак, когда вы запускаете
ssh remote sh -c 'echo hi > hi.txt'
Фактически, вы выполняете следующее:
ssh remote 'sh -c echo hi > hi.txt'
Это запускает sh -c echo
, передает оболочку ( не echo
) аргумент hi
(который не используется) и перенаправляет вывод на hi.txt
.
Решение, предлагаемое chthonous (вложенное цитирование), является одним из способов решения этой проблемы. Давайте посмотрим на это:
ssh remote sh -c '"echo hi > hi.txt"'
Здесь происходит то, что ssh объединяет все аргументы, поэтому вы фактически получаете:
ssh remote 'sh -c "echo hi > hi.txt"'