您的位置:首页 > 运维架构 > Shell

【Linux】使用sed、awk来完成批量修改配置文件的shell设计

2017-10-26 00:39 2166 查看
背景:现在有个三个文件,以后可能会更多,就以这三个文件为例子。三个配置文件在服务器ip变动的时候(自己的虚拟机),都需要手动去修改ip地址。

想法:那就用shell脚本来完成自动化批量修改

设计:

1.拿到服务当前IP(注意:使用的esc下的那个引号来保证命令正常执行,还可以使用$())

ip=`ifconfig eth0 | sed -n '/inet addr/p' | awk '{print $2}' | awk -F: '{print $2}'`
sed来匹配指定内容的行

2.切换工作目录

3.对目录下的三个文件进行操作,使用数组来存储(注意:字符串之间有空格间隔)

filelist=("redis6380.conf" "redis6381.conf" "redis6382.conf")


4.对数组进行for循环处理(注意:这个for括号中的语法)

for f in "${filelist[@]}";do
done

5.查询到需要修改的内容并进行替换(具体的就不解释了,可以Google一下或看官网)
$(awk -v tmps="$ip" '$1~/slaveof/{$2=tmps}1' $f 1<>$f)


awk 使用了-v来设置变量tmps

最后整合一下,shell脚本如下:
#!/bin/bash
echo '>>>Get server ipaddress :'
ip=`ifconfig eth0 | sed -n '/inet addr/p' | awk '{print $2}' | awk -F: '{print $2}'`
echo $ip

workspace='/etc/'
cd $workspace
echo '>>>current work path :' `pwd`

filelist=("re6380.conf" "re6381.conf" "re6382.conf")

for f in "${filelist[@]}";do
echo ">>>current check file is :" $f
# cat redis6380.conf | grep '^slaveof' | awk '{print $2}'
# cat redis6380.conf | awk '/^slaveof/{print $2}'
oldip=$(cat $f | sed -n '/^slaveof/p' | awk '{print $2}')
#$(awk -v tmps="$ip" '$1~/slaveof/{$2=tmps}1' $f 1<>$f)
newip=$(cat $f | sed -n '/^slaveof/p' | awk '{print $2}')
echo $oldip '-->' $newip
done

echo 'successed.'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell awk sed