我在两个不同的目录中有两个几乎相同的配置文件
## 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但仅适用于两个文件中的循环部分。如何仅对两个文件使用一组命令来执行此操作?
这可以通过使用 的就地编辑来完成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.conf,file2.conf因此loop:以空行开头和结尾的部分的任何enable行都重写为enable: true