我们有 Bash 脚本。我们想在 Bash 脚本中更改名称 - master02
with 。$machine_master
value=master02_up
#master02
http://master02.$domain:8080
如何改变master02
,$machine_master
仅当master02
是之后 http://master02
。
预期输出:
value=master02_up
#master02
http://$machine_master.$domain:8080
答案1
使用标准sed
:
sed 's#http://master02.\$domain:8080#http://$machine_master.$domain:8080#' file >newfile
这将替换确切的字符串http://master02.$domain:8080
并将http://$machine_master.$domain:8080
结果写入新文件。
in必须进行转义,以免被解释为“行尾”模式$
。替换文本中$domain
的$
不需要转义,因为这部分不是模式。
我使用#
作为sed
替换命令 ( s
) 的分隔符,因为模式和替换文本都包含/
默认分隔符。
该命令也可以缩短为
sed 's#http://master02#http://$machine_master#' file >newfile
这样做是否安全(这取决于文件的内容以及您要替换的文本实例)。
测试:
$ cat file
value=master02_up
#master02
http://master02.$domain:8080
$ sed 's#http://master02.\$domain:8080#http://$machine_master.$domain:8080#' file >newfile
$ cat newfile
value=master02_up
#master02
http://$machine_master.$domain:8080