mn.ftg.com
我们需要将文件中的server_ 替换为 localhost ambari-agent.ini
,如下所示
echo $machine
server_mn
echo $domain
ftg.com
more ambari-agent.ini
[server]
hostname=localhost
是否需要在点前添加反斜杠,如下所示:
sed "s/hostname=localhost/hostname=$machine\.$domain/g" ambari-agent.ini
或者安全地这样做(不带反斜杠)
sed "s/hostname=localhost/hostname=$machine.$domain/g" ambari-agent.ini
答案1
仅当点是正则表达式的一部分并且应该与文字点匹配时,才需要转义该点。要将文字点与正则表达式匹配,您可以使用\.
或[.]
。
s
然而,表达式中的替换部分sed
是不是一个正则表达式。
唯一需要转义的字符(使用反斜杠)是\
、&
、换行符和s
命令分隔符(/
如果使用s/pattern/replacement/
)。
这意味着你的命令
sed "s/hostname=localhost/hostname=$machine.$domain/g" ambari-agent.ini
只要所涉及的变量的值遵守上述规则,就可以工作。我个人还会将表达式锚定到行的开头,并g
从s
命令中删除标志。