como usar aspas em sed e ssh?

como usar aspas em sed e ssh?

não consigo fazer isso funcionar no 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

eu essencialmente quero este sed que funciona em uma linha de comando normal, mas quebra no ssh:

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

Alguém tem alguma ideia? muito apreciado.

Responder1

UsandoA ideia de Jeffde usar um documento aqui para o sedscript em si (bem, ele menciona uma "string aqui", mas você também teria problemas em citar lá, eu acho):

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

Se o sedhost remoto puder ler um sedscript da entrada padrão usando -f -, então isso provavelmente funcionaria (caso contrário, por exemplo, em alguns sistemas BSD, tente -f /dev/stdin).

O comando chama sedo host remoto e passa o sedscript de edição na entrada padrão. O sedscript está entre aspas simples devido às aspas em 'SED_END', portanto o shell não tentará expandir as coisas em seu texto.

Também removi o final $da expressão regular, pois não é necessário ( .*corresponderia ao final da linha de qualquer maneira).

Um script um pouco mais curto sed(evitando apenas mencionar MASQUERADE_ASduas vezes):

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

informação relacionada