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

0

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 deve substituir a seqüência de caracteres que está lá nessa linha.

Meu código se parece com: meu arquivo de script sc.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 trabalhando na minha máquina host, mas esses comandos não estão funcionando na máquina remota, enquanto estiver usando ssh. Alguém pode me ajudar ? TIA.

    
por Ejjagiri Venkatesh 25.04.2017 / 06:41

1 resposta

2

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

  • Assumindo que seu arquivo /home/user/script.sh esteja visível no m / c remoto, não é necessário procurar primeiro números de linha nos quais os comandos s/// precisam acontecer. Você precisa perceber que sed permite /regex/s/// e também selecionar os números de linha onde os subs serão feitos.
por 25.04.2017 / 07:12