
Estoy intentando reemplazar una cadena en un archivo que está en una máquina remota. En primer lugar, tengo que obtener el número de línea usando el comando grep y luego, usando ese número de línea, debo reemplazar la cadena que está en esa línea.
Mi código se ve así: mi archivo 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
Los comandos del bloque EOF funcionan en mi máquina host, pero estos comandos no funcionan en la máquina remota mientras uso ssh. Alguien me puede ayudar ? TIA.
Respuesta1
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
Explicación
- Suponiendo que su
/home/user/script.sh
archivo sea visible en el m/c remoto, entonces no es necesario buscar primero los números de línea dondes///
deben realizarse los comandos. También debe conocer lossed
permisos/regex/s///
para seleccionar los números de línea donde se realizarán los subs.