我不能让这个在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有人有什么想法吗?非常感谢。
发布于 2019-11-27 22:34:54
使用杰夫的想法对sed脚本本身使用there document(嗯,他提到了"here-string",但我认为在这里引用也会有问题):
ssh host 'sed -i -f - /etc/mail/sendmail.mc' <<'SED_END'
s/dnl MASQUERADE_AS.*/MASQUERADE_AS(`domain.com')dnl/
SED_END如果远程主机上的sed可以使用-f -从标准输入读取sed脚本,那么这很可能有效(否则,在某些BSD系统上,尝试使用-f /dev/stdin)。
该命令在远程主机上调用sed,并在标准输入上传递sed编辑脚本。由于sed脚本中的引号是单引号,所以shell不会试图在文本中展开内容。
我还删除了正则表达式中的尾随$,因为它是不需要的(无论如何,.*将与行尾匹配)。
一个稍微短一些的sed脚本(只是避免两次提到MASQUERADE_AS ):
s/dnl \(MASQUERADE_AS\).*/\1(`domain.com')dnl/https://unix.stackexchange.com/questions/554477
复制相似问题