¿Cómo usar comillas en sed y ssh?

¿Cómo usar comillas en sed y ssh?

No puedo hacer que esto funcione en bash/rhel 7:

ssh host "sed -i -e \"s/dnl MASQUERADE_AS.*\$/MASQUERADE_AS(\`domain.com\')dnl/\" /etc/mail/sendmail.mc"

bash: -c: line 0: unexpected EOF while looking for matching ``'
bash: -c: line 1: syntax error: unexpected end of file

Básicamente quiero este sed que funciona en una línea de comando normal pero se interrumpe dentro de ssh:

sed -i -e "s/dnl MASQUERADE_AS.*$/MASQUERADE_AS(\`domain.com\')dnl/" /etc/mail/sendmail.mc

¿Alguien tiene alguna idea? muy apreciado.

Respuesta1

Usandola idea de jeffde usar un documento aquí para el sedscript en sí (bueno, menciona una "cadena aquí", pero creo que también tendrías problemas para citar allí):

ssh host 'sed -i -f - /etc/mail/sendmail.mc' <<'SED_END'
s/dnl MASQUERADE_AS.*/MASQUERADE_AS(`domain.com')dnl/
SED_END

Si sedel host remoto puede leer un sedscript desde la entrada estándar usando -f -, entonces esto probablemente funcione (de lo contrario, por ejemplo en algunos sistemas BSD, intente -f /dev/stdin).

El comando llama sedal host remoto y pasa el sedscript de edición en la entrada estándar. El sedscript tiene comillas simples debido a las comillas en 'SED_END', por lo que el shell no intentará expandir elementos en su texto.

También eliminé el final $de la expresión regular, ya que no es necesario ( .*de todos modos coincidiría con el final de la línea).

Un guión un poco más corto sed(simplemente evitando mencionarlo MASQUERADE_ASdos veces):

s/dnl \(MASQUERADE_AS\).*/\1(`domain.com')dnl/

información relacionada