Como usar o sed para substituir uma string usando o número da linha em uma máquina remota usando ssh?

Como usar o sed para substituir uma string usando o número da linha em uma máquina remota usando ssh?

Estou tentando substituir uma string em um arquivo que está em uma máquina remota. Em primeiro lugar, tenho que obter o número da linha usando o comando grep e, em seguida, usando esse número de linha, devo substituir a string que está nessa linha.

Meu código se parece com: meu arquivo de scriptsc.sh.

# 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

os comandos no bloco EOF estão funcionando na minha máquina host, mas esses comandos não estão funcionando na máquina remota, ao usar ssh. Alguém pode me ajudar ? TIA.

Responder1

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

Explicação

  • Supondo que seu /home/user/script.sharquivo esteja visível no m/c remoto, não há necessidade de procurar primeiro os números das linhas onde os s///comandos precisam acontecer. Você também precisa perceber as sedpermissões /regex/s///para selecionar os números das linhas onde as subs serão feitas.

informação relacionada