我在两个不同的目录中有两个几乎相同的配置文件
## 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:
enable
enable: true
答案2
不需要解析整个块
sed -i '/loop/{:a;n;/enable/s/false/true/;Ta;}' file1.conf file2.conf