sed 追加文本类容_利用sed的追加功能批量在文件中追加内容

本文介绍了如何使用sed命令在多个游戏区服的配置文件app.conf.php中批量追加redis配置。通过示例展示了从简单的在本地文件中追加到通过ssh在远程主机上批量修改的完整过程,强调了自动化处理的重要性以及处理shell脚本中引号问题的技巧。
摘要由CSDN通过智能技术生成

应用场景:

最近由于开发同事需求,需要在各个区服的游戏配置文件中追加一个BI相关的redis配置信息。

如在app.conf.php中有如下字段

'redis_list' => array(

'normal' => array(

'host' => '192.168.5.7',

'port' => 6382,

'db' => 1

),

现在需要在redis_list数组内增加一个bi_redis的配置,如下

'redis_list' => array(

'bi_redis' => array(

'host' => '192.168.5.23',

'port' =>   6403,

'db' => 1

),

'normal' => array(

'host' => '192.168.5.7',

'port' => 6382,

'db' => 2

),

),

线上大概有100个区服左右,也就是说需要在100个配置文件中去添加红色那段内容。全部手动添加肯定不行的,我首先想到的就是利用sed的 -i 参数更改文件,然后是利用sed的a参数追加内容,再结合ssh进行批量修改。

1.查看添加内容,但是不真正更改文件内容

sed -n "/redis_list/a\   'bi_redis' => array( \n\t'host' => '192.168.5.23',\n\t 'port' => 6403,\n\t'db' => 1\n\t)," app.conf.php

2.更改文件内容,添加内容

sed -i "/redis_list/a\   'bi_redis' => array( \n\t'host' => '192.168.5.23',\n\t 'port' => 6403,\n\t'db' => 1\n\t)," app.conf.php

3.结合ssh更改其他主机上的app.conf.php

相关脚本:

ssh $user@$host "sed -i /redis_list/a\"'bi_redis' => array( \n\t 'host' => '192.168.5.23',\n\t 'port' =>   6403,\n\t 'db' => 1\n\t),\" $rootdir/config/app.conf.php"

4.将/data/zhanguo_app/目录下所有的app.conf.php文件中添加如上内容并检查语法

find /data/zhanguo_app/  -name app.conf.php -exec   sed -i "/redis_list/a\   'bi_redis' => array( \n\t'host' => '127.0.0.1',\n\t 'port' => 6380,\n\t'db' => 1\n\t)," {} \; -exec php -l {} \;

经验分享一下:

像这种需要批量修改文件的案例,首先要考虑的是能够通过脚本或工具进行修改,能不手动修改就不要手动修改。然后根据实际应用场景,想想思路,比如这里需要批量对app.conf.php文件添加内容,首先想到利用sed的-i 参数进行修改,然后通过sed的a参数进行追加内容。需要对多台服务器进行修改可以通过ssh或其他工具执行。这里sed结合使用shell变量和ssh,遇到的最大的问题就是单引号(')和双引号(")的正确处理,要不然没法达到需求。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值