vim 系列
vim 适合用在我们手动去替换,但是每次都需要登录机器,打开文件,输入替换指令,然后回车。
sed 系列
场景一:原地替换
比如sshd_config中,ClientAliveInterval配置的是9000我们想要改成600。思路: 先把以ClientAliveInterval开头的行删除,然后再在某一行的下面添加一行配置就行。这种思路的前提是,以ClientAliveInterval开头的行只有一行且是我们目标需要替换的行,否则可能会删除多行,而在某一行下面添加一行,这个某一行也应该能精确的确定,否则就会插入多行。
脚本示例
configSshdConfig(){
filePath='./config/sshd_config'
echo "开始配置${filePath}"
echo "开始备份${filePath}"
cp ${filePath} "${filePath}.$(date +%s)"
echo "完成备份${filePath}->${filePath}.$(date +%s)"
echo "写入配置${filePath}"
sed -i '/^ClientAliveInterval/d ; /ClientAliveInterval/a\ClientAliveInterval 600' "${filePath}"
sed -i '/^ClientAliveCountMax/d ; /ClientAliveCountMax/a\ClientAliveCountMax 2' "${filePath}"
sed -i '/^PermitRootLogin/d ; /#PermitRootLogin/a\PermitRootLogin no' "${filePath}"
cat ${filePath}|grep -A2 -E "ClientAliveInterval|ClientAliveInterval|#PermitRootLogin"
}
删除匹配某个字符的行
sed -i '/xxx/d' ${file}
在匹配某个字符的行下面添加数据
sed -i '/xxx/a\yyyy\
zzzz' ${file}