如何用 sed 替换 var 的值

如何用 sed 替换 var 的值

我有一个变量映射,我需要在 bash 脚本中动态替换特定变量的值。我的变量是这样的:

array = {
    node1 = [
         {
           "apacheversion" = "1.0"
           "mysqlversion"  = "2.0"
         }
    ]
    node2 = [
         {
           "apacheversion" = "1.0"
           "mysqlversion"  = "2.0"
         }
    ]
}

所以,我需要用 'sed' 替换 apacheversion 和 mysqlversion 的值。

"apacheversion" = "new.value" "mysqlversion" = "new.value"

有没有办法只在特定节点上执行?例如仅替换node1。如果不可能,我不介意,因为它是变量的临时文件。

谢谢!

答案1

虽然通常最好使用解析器,但一种方法是通过awk.通过正则表达式选择块/start/,/end/,然后仅对该块进行操作:

 awk '/node1 = \[/,/\]/ {
        if ($0 ~ /apacheversion/) {gsub(/1.0/,"new.version")}
        if ($0 ~ /mysqlversion/) {gsub(/2.0/,"new.version")}
     } 1' file.terra

如果您将eg 定义=为字段分隔符,那么您可能会更通用并替换字段2 的任何内容,而不是使用gsub模式匹配+替换。

现在,要在脚本中使用它,请从环境中获取变量:

#!/bin/bash
varAPA=2.0
varSQL=5.0
awk -v newAPA="$varAPA" -v newSQL="$varSQL" '/node1 = \[/,/\]/ {
        if ($0 ~ /apacheversion/) {gsub(/1.0/,newAPA)}
        if ($0 ~ /mysqlversion/) {gsub(/2.0/,newSQL)}
     } 1' file.terra

相关内容