场景
- 我们在远程连接服务器修改配置文件时, 有时候需要查找替换不正确的文本, 最慢的方式就是
vi 文件, 之后移动方向键查找到某个关键字中, 接着按下i进行删除和粘贴. 如果需要替换的文件多了, 则需要一个个文件打开并挨个替换, 容易出错还费时间, 有没有更好的办法?
说明
vi
-
准备工作:
vi显示行号是:set nu, 这样只是在本次编辑时显示, 如果要永久显示, 那么需要找到vimrc配置文件并在一空行上加入set nu, 在macOS系统上, 路径是~/.vimrc, 如果不存在, 那么使用vi ~/.vimrc来直接新建一个配置文件. -
vi有自己的查找替换命令, 也有大小写敏感的命令, 如果能利用vi自带的命令替换文本, 无疑会快很多.
方式1: 第一次替换, 我们需要在某个文件里挨个查找文本,确认之后再逐个替换.
步骤1: 尾行模式下输入:set noic:
:set ic # 忽略大小写敏感
:set noic # 大小写敏感
步骤2: 命令模式下输入:/要查找的文本, 比如查找macOS,:/macOS, 找到一个后:s/macOS/Windows, 把查找到第一个macOS替换为Windows. 这样逐步把所有匹配字符串替换完. 尾行模式下输入n向前搜索, 大写N向后搜索.
:s/macOS/Windows
方式2: 第二次替换, 确认第一次查找方式没错之后, 直接用替换全部到方式来一次过替换单个文件里的所有匹配字符串.
步骤1: 进入尾行模式
:%s/macOS/Windows/g
方式3: 替换当前行的所有敏感字符, 比如/ 替换为//, 这时候就需要\来转义.
:s/\/\//\//g
注意: 如果当前步骤替换错了, 可以在命令模式下按u, 撤销上一步操作.
sed
vi的替换已经够快了, 有没有更快的方式, 比如不需要打开文本, 直接指定文本路径替换, 那就更快了. 有的, 使用sed命令. 这个操作会直接修改sign-code.sh文件, 修改之前会生成一份原有文件的备份为sign-code.she, 这样就不怕改错啦.
sed -ie "s/old string/new string/g" sign-code.sh
参考
vi 的文本替换
macOS 与 Linux 下 Vim 配置文件
Linux之vi三种模式常用操作的学习
Vim查找忽略大小写
457

被折叠的 条评论
为什么被折叠?



