sed 및 ssh에서 따옴표를 사용하는 방법은 무엇입니까?

sed 및 ssh에서 따옴표를 사용하는 방법은 무엇입니까?

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

나는 기본적으로 일반 명령줄에서는 작동하지만 ssh에서는 중단되는 이 sed를 원합니다.

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

누구든지 아이디어가 있나요? 고마워하는.

답변1

사용제프의 ​​생각스크립트 자체에 대해서는 여기 문서를 사용하십시오 sed(음, 그는 "여기에 문자열"을 언급했지만 거기에서도 참조하는 데 문제가 있을 것이라고 생각합니다).

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

sed원격 호스트의 스크립트가 sed표준 입력 읽기를 사용할 수 있다면 -f -이것이 작동할 수 있습니다(그렇지 않은 경우, 예를 들어 일부 BSD 시스템에서는 시도 -f /dev/stdin).

이 명령은 sed원격 호스트를 호출하고 sed표준 입력으로 편집 스크립트를 전달합니다. sed의 따옴표로 인해 스크립트는 작은 따옴표로 묶 'SED_END'이므로 쉘은 텍스트 내용을 확장하려고 시도하지 않습니다.

$또한 필요하지 않기 때문에 정규식에서 후행을 제거했습니다 ( .*어쨌든 줄의 끝과 일치합니다).

약간 더 짧은 sed스크립트(두 번 언급하지 않기 위해 MASQUERADE_AS):

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

관련 정보