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

来源:互联网 发布:linux下怎么编程 编辑:程序博客网 时间:2024/05/22 12:53

背景:现在有个三个文件,以后可能会更多,就以这三个文件为例子。三个配置文件在服务器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[@]}";dodone

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

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



最后整合一下,shell脚本如下:
#!/bin/bashecho '>>>Get server ipaddress :'ip=`ifconfig eth0 | sed -n '/inet addr/p' | awk '{print $2}' | awk -F: '{print $2}'`echo $ipworkspace='/etc/'cd $workspaceecho '>>>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 '-->' $newipdoneecho 'successed.'





原创粉丝点击