linux - 用于迁移配置文件变量的 Shell 脚本

标签 linux bash shell sh

我需要一种方法,在使用 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

关于linux - 用于迁移配置文件变量的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24294217/

相关文章:

linux - 使 menuconfig 从 ti-processor-sdk-linux-am335x-evm-01.00.00.03 执行错误

c++ - 如何使用 C/C++ 通过 system() 系统调用以外的其他方法获取 Linux 中的文件功能?

linux - 从根 bash 脚本以非根身份运行文件

linux - Shell 代码在控制台中有效,但在脚本中无效

linux - 我正在尝试使用子进程模块来运行由 html 文件组成的终端命令

linux - shell在重启和非正常关机时是否收到term信号

linux - 为什么MongoDB在Ubuntu 11.10安装时无法创建用户?

regex - 更改文件夹中的所有匹配项

linux - 过滤文件名中嵌入时间戳的文件

java - 脚本如何获取不同类型的命令行参数并将其提供给 java 程序?