我無法讓它在 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
我本質上想要這個 sed ,它可以在常規命令列上運行,但會在 ssh 中中斷:
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'
,因此 shell 不會嘗試擴展其文字中的內容。
我還刪除了正規表示式中的尾隨,$
因為不需要它(.*
無論如何都會匹配到行尾)。
一個稍微短一點的sed
腳本(只是避免提及MASQUERADE_AS
兩次):
s/dnl \(MASQUERADE_AS\).*/\1(`domain.com')dnl/