我需要一种在使用Shell脚本的嵌入式系统上的更新脚本期间将变量从一个配置文件迁移到下一个/较新文件的方法。
我有一个结构化的配置文件,可供CGI脚本和C程序读取:
[Version]
api_version = 10
[Broadcast]
ip = 239.10.10.10
port = 35680
[Transmission]
uuid_long = YES
在更新过程中,我需要获取结构类似的新文件,并从旧文件中复制值。旧文件中存在的任何值都将在新文件中存在,但是并非新文件中的所有字段都将在旧文件中存在。
我的想法是在文件中循环查找
key = value\n
模式,并在新文件中执行替换操作,但是我不确定如何执行grep
将其剥离为2个可以使用的值,并且然后在不知道新文件中的值的情况下,执行与键和换行符匹配的sed
。注意:我只有'sh'可以使用,没有bash,如果有区别的话。 (嵌入式系统)
最佳答案
感谢您提出使用AWK的建议。我在Shell脚本方面非常虚弱,因此,如果可以进行改进,请提出建议。
#!/bin/sh
# Collect all the keys from the original config file
KEYS=$(awk '{ if ($1 !~ /\[[A-Za-z]*\]/ && $1 != "") print $1, "\n" }' /etc/file.conf)
# Loop through they keys replacing the values in the new config file
for KEY in $KEYS
do
VALUE=$(awk -v key="$KEY" '{ if($1 ~ key) print $3 }' /etc/file.conf)
sed -i "s/$KEY.*/$KEY = $VALUE/g" /etc/new.file.conf
done