如何在文件中查找与替换


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}

评论