linux批量修改配置文件中的参数
使用场景:
搜索配置文件中代码块输出,配置文件格式类似下面

问题描述
项目中几十台服务器,其中的每个标签下面都有相同的参数名,但是不同的值,直接grep并不清楚哪个是哪个
解决方案:
通过命令只查询对应的标签块,这样会缩减输出,配合clush -b命令,尽量减少输出
以[redis]为例,以下命令均可以实现仅返回redis标签下面的内容
sed -n '/^\[redis\]/,/^\[/p' test.ini
# -n 取消默认sed的输出 常与sed内置命令 p 一起用,只输出匹配到的内容
grep -Pzo '(?s)\[redis\].*?\n(\[|\Z)' test.ini | head -n -1
awk -v RS= '/\[redis\]/' test.ini
awk '/^\[redis\]/ {flag=1; print; next} /^\[/ && flag {flag=0; exit} flag' test.ini
grep -A10 'redis' FileMonitorConf.ini
# -A参数为after意思,匹配redis和后面的内容输出十行

如何修改参数
sed -i '/^\[redis\]/,/^\[/ s/^\(缓存过期时间=\).*/\17200/' test.ini
命令解析:
-
/^\[redis\]/,/^\[/:限定操作范围为[redis]到下一个[开头的区块 -
s/^\(缓存过期时间=\).*/\17200/:-
\(...\)捕获分组(保留参数名) -
\1引用第一个分组(即缓存过期时间=) -
7200替换原值
-

浙公网安备 33010602011771号