¿Cómo usar sed para reemplazar una cadena usando el número de línea en una máquina remota usando ssh?

¿Cómo usar sed para reemplazar una cadena usando el número de línea en una máquina remota usando ssh?

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.sharchivo sea visible en el m/c remoto, entonces no es necesario buscar primero los números de línea donde s///deben realizarse los comandos. También debe conocer los sedpermisos /regex/s///para seleccionar los números de línea donde se realizarán los subs.

información relacionada