使用Bash将所有文件密钥替换为新值

时间:2019-03-15 15:35:08

标签: linux bash sed

在不指定键的情况下查找和替换文件中所有键的值的最佳方法是什么?

示例:

originalFile.txt  ------------------------------------>  newFile.txt              
key1=a                                                   key1=$key1
key2=b                                                   key2=$key2
key3=c                                                   key3=$key3 

我想到了这个,但是我无法为任何新添加的密钥动态地完成它:

sed '/^key1/s/=.*$/= $key1/' newFile.txt

3 个答案:

答案 0 :(得分:2)

awk -vFS="=" -v OFS="=" '$2="$"$1' originalFile.txt

使用sed:使用向后引用捕获=\1的左侧和=\2的右侧:

sed -r 's/(^[^=]+)*=(.*)/\1=$\1/g' originalFile.txt
key1=$key1
key2=$key2
key3=$key3

答案 1 :(得分:0)

这应该做到:

sed -re 's/^(key[[:digit:]]+)=.*$/\1=\$\1/' originalFile.txt

之所以起作用,是因为(因为使用了-r选项),一对括号捕获了其匹配项。在替换模式中,\1复制匹配的文本。

答案 2 :(得分:0)

此脚本从env中提取密码并将其包含在新文件中:

product_variation