使用 sed 时需要在点前添加反斜杠

使用 sed 时需要在点前添加反斜杠

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

只要所涉及的变量的值遵守上述规则,就可以工作。我个人还会将表达式锚定到行的开头,并gs命令中删除标志。

相关内容