在特定语法后替换名称

在特定语法后替换名称

我们有 Bash 脚本。我们想在 Bash 脚本中更改名称 - master02with 。$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

相关内容