使用 awk/sed 更改配置文件

GMa*_*ter 0 sed awk

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

## 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
Run Code Online (Sandbox Code Playgroud)

现在我想将enable: false更改为enable: true但仅适用于两个文件中的循环部分。如何仅对两个文件使用一组命令来执行此操作?

Ste*_*ris 5

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

sed -i '/^loop:/,/^$/ { s/enable:.*$/enable: true/ }' file1.conf file2.conf
Run Code Online (Sandbox Code Playgroud)

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

/^loop:/,/^$/ { .... }
Run Code Online (Sandbox Code Playgroud)

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

里面我们有

s/enable:.*$/enable: true/
Run Code Online (Sandbox Code Playgroud)

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

结果是我们重写file1.conffile2.conf因此loop:以空行开头和结尾的部分的任何enable行都重写为enable: true