我需要从 bash 脚本修改配置文件,更改特定设置的值。我需要使用常见的 Linux 工具(sed/awk/tr/etc.)进行更改。配置文件可以在不同的节中具有相同名称的键,如下所示:
[section1]
key1=a
key2=b
[section2]
key1=a
key2=b
并且每节中的行可以按不同的顺序排列,中间可以有空行/注释等。我试过 sed,但无法跨行匹配(所以我无法匹配节名称)。有人可以建议如何:1. 更改与 section1 key1 关联的值?2. 将与 section1 key1 关联的值打印到 stdout?
答案1
你可以用 ex 和此处的脚本来实现。下面是一个简单的示例:
ex $conf <<-EOF
/^\[section1\]
/^key1=
s/=a/=c/
wq
EOF
首先搜索节头,然后搜索变量名,然后仅更改该行上的设置。
答案2
听起来像是 Augeas 的工作,它将文件分解为可编辑层次结构中的部分和设置。它不完全是一个标准工具,因为它可能不会默认安装在给定系统上,但对于大多数 Linux 来说,它将作为一个软件包提供。
答案3
您可以使用 sed 来匹配多行;这里有一篇很棒的文章:如何使用 sed 替换多行字符串?