首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sed & ssh中如何使用引号?

在sed & ssh中如何使用引号?
EN

Unix & Linux用户
提问于 2019-11-27 17:43:23
回答 1查看 540关注 0票数 0

我不能让这个在bash/rhel 7上工作:

代码语言:javascript
复制
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中中断:

代码语言:javascript
复制
sed -i -e "s/dnl MASQUERADE_AS.*$/MASQUERADE_AS(\`domain.com\')dnl/" /etc/mail/sendmail.mc

有人有什么想法吗?非常感谢。

EN

回答 1

Unix & Linux用户

发布于 2019-11-27 22:34:54

使用杰夫的想法sed脚本本身使用there document(嗯,他提到了"here-string",但我认为在这里引用也会有问题):

代码语言:javascript
复制
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 ):

代码语言:javascript
复制
s/dnl \(MASQUERADE_AS\).*/\1(`domain.com')dnl/
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/554477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档