【Linux】使用sed、awk来完成批量修改配置文件的shell设计
背景:现在有个三个文件,以后可能会更多,就以这三个文件为例子。三个配置文件在服务器ip变动的时候(自己的虚拟机),都需要手动去修改ip地址。想法:那就用shell脚本来完成自动化批量修改设计:1.拿到服务当前IP(注意:使用的esc下的那个引号来保证命令正常执行,还可以使用$())ip=`ifconfig eth0 | sed -n '/inet addr/p' |
·
背景:现在有个三个文件,以后可能会更多,就以这三个文件为例子。三个配置文件在服务器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.'
更多推荐
已为社区贡献5条内容
所有评论(0)