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

命令解析:

  1. /^\[redis\]/,/^\[/:限定操作范围为 [redis] 到下一个 [ 开头的区块

  2. s/^\(缓存过期时间=\).*/\17200/

    • \(...\) 捕获分组(保留参数名)

    • \1 引用第一个分组(即 缓存过期时间=

    • 7200 替换原值

posted @ 2025-04-29 23:47  水库浪子9527  阅读(1)  评论(0)    收藏  举报  来源