使用 awk/sed 更改配置文件

使用 awk/sed 更改配置文件

我在两个不同的目录中有两个几乎相同的配置文件

## file1.conf ##
tunnel:
    enable: true
    interval: 20
    public: false

loop:
    enable: false
    interval: 20
    public: false

link:
    enable: true
    interval: 20
    public: false

## file2.conf ##
tunnel:
    enable: true
    interval: 20
    public: false

loop:
    interval: 20
    enable: false
    public: false

link:
    enable: true
    interval: 20
    public: false

现在我想改变启用:假启用:真但仅适用于环形两个文件中的部分。如何仅使用一组命令来处理这两个文件?

答案1

这可以通过使用 就地编辑来完成sed -i

sed -i '/^loop:/,/^$/ { s/enable:.*$/enable: true/ }' file1.conf file2.conf

该命令分为两个主要部分:

/^loop:/,/^$/ { .... }

这意味着我们将 中的内容限制为以空行开头和结尾的{...}部分。loop:

里面我们有

s/enable:.*$/enable: true/

这只是确保该enable:行设置为 true。

结果是我们重写file1.conf,以便以空行file2.conf开头和结尾的部分有任何行重写为loop:enableenable: true

答案2

不需要解析整个块

sed -i '/loop/{:a;n;/enable/s/false/true/;Ta;}' file1.conf file2.conf

相关内容