gpt4 book ai didi

bash - 使用 bash/sed 搜索和替换文件中的变量

转载 作者:行者123 更新时间:2023-11-29 09:04:44 26 4
gpt4 key购买 nike

我正在尝试编写一个 bash 脚本 (script.sh) 来搜索和替换 input.sh 文件中的一些变量。但我只需要修改存在于 variable_list 文件中的变量,其他的保持原样。

变量列表

${user}  
${dbname}

输入.sh

username=${user}  
password=${password}
dbname=${dbname}

预期的输出文件

username=oracle  
password=${password} > This line won't be changed as this variable(${password}) is not in variable_list file
dbname=oracle

以下是我尝试使用的脚本,但我无法找到正确的 sed 表达式

脚本.sh

export user=oracle  
export password=oracle123
export dbname=oracle

variable='variable_list'
while read line ;
do
if [[ -n $line ]]
then
sed -i 's/$line/$line/g' input.sh > output.sh
fi
done < "$variable"

最佳答案

这可行:

#!/bin/bash

export user=oracle
export password=oracle123
export dbname=oracle

variable='variable_list'
while read line ;
do
if [[ -n $line ]]
then
exp=$(sed -e 's/\$/\\&/g' <<< "$line")
var=$(sed -e 's/\${\([^}]\+\)}/\1/' <<< "$line")
sed -i "s/$exp/${!var}/g" input.sh
fi
done < "$variable"

第一个 sed 表达式将 $ 转义为​​正则表达式元字符。第二个只提取变量名,然后我们使用间接获取当前 shell 中的值并在 sed 表达式中使用它。

编辑

与其多次重写文件,不如这样做更有效率,为 sed 构建参数列表:

#!/bin/bash

export user=oracle
export password=oracle123
export dbname=oracle

while read var
do
exp=$(sed -e 's/\$/\\&/g' <<< "$var")
var=$(sed -e 's/\${\([^}]\+\)}/\1/' <<< "$var")
args+=("-e s/$exp/${!var}/g")
done < "variable_list"

sed "${args[@]}" input.sh > output.sh

关于bash - 使用 bash/sed 搜索和替换文件中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9928492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com