linux批量追加内容,利⽤sed的追加功能批量在⽂件中追加内容应⽤场景:
最近由于开发同事需求,需要在各个区服的游戏配置⽂件中追加⼀个BI相关的redis配置信息。
如在f.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
),
linux怎么读取文件内容
),
线上⼤概有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)," f.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)," f.php
3.结合ssh更改其他主机上的f.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/f.php"
4.将/data/zhanguo_app/⽬录下所有的f.php⽂件中添加如上内容并检查语法
find /data/zhanguo_app/  -f.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 {} \;
经验分享⼀下:
像这种需要批量修改⽂件的案例,⾸先要考虑的是能够通过脚本或⼯具进⾏修改,能不⼿动修改就不要⼿动修改。然后根据实际应⽤场景,想想思路,⽐如这⾥需要批量对f.php⽂件添加内容,⾸先想到利⽤sed的-i 参数进⾏修改,然后通过sed的a参数进⾏追加内容。需要对多台服务器进⾏修改可以通过ssh或其他⼯具执⾏。这⾥sed结合使⽤shell变量和ssh,遇到的最⼤的问题就是单引号(')和双引号(")的正确处理,要不然没法达到需求。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。