
Я пытаюсь заменить строку в файле, который находится на удаленной машине. Во-первых, я должен получить номер строки с помощью команды grep, а затем, используя этот номер строки, заменить строку, которая находится в этой строке.
Мой код выглядит так: мой файл скриптаsc.ш.
# path of script.sh on remote machine
file_path="/home/user/script.sh"
#file-[0-9]\.[0-9]\.[0-9]\.txt using for file-1.0.5.txt
sshpass -p 'pswd' ssh user@remote-01 "bash -s" <<EOF
n=$(grep -wn "/tmp/xyz/file-[0-9]\.[0-9]\.[0-9]\.txt\" $file_path | cut -d : -f 1)
sed -i '{$n}s/old_string/new_string/}' $file_path;
EOF
команды в блоке EOF работают на моей хостовой машине, но эти команды не работают на удаленной машине при использовании ssh. Может кто-нибудь мне помочь? TIA.
решение1
file_path="/home/user/script.sh"
sshpass -p 'pswd' ssh user@remote-01 "bash -s" <<EOF
sed -i -e '\|/tmp/xyz/file-[0-9]\.[0-9]\.[0-9]\.txt|s/old_string/new_string/' "$file_path"
EOF
Объяснение
- Если предположить, что ваш
/home/user/script.sh
файл виден на удаленном m/c, то нет необходимости сначала искать номера строк, гдеs///
должны быть выполнены команды. Вам нужно реализовать разрешения,sed
а/regex/s///
также выбрать номера строк, где будут сделаны подпрограммы.