文本内容替换
1. sed 命令
1.1 基本语法
sed -i 's/regexp/replacement/flags' file
参数说明:
regexp:要替换的内容,支持正则表达式replacement:替换成的文本flags:可选标识g全局替换(不加就只替换每行第一个)i忽略大小写
-i:直接修改文件内容(不加就只输出到终端)
1.2 常用示例
替换单个文件:
# 把所有的 http 替换成 https
sed -i 's/http/https/g' config.txt
# 删除所有空行
sed -i '/^$/d' file.txt
# 替换时忽略大小写
sed -i 's/error/ERROR/gi' log.txt
批量替换多个文件:
# 替换当前目录所有 .txt 文件
sed -i 's/old/new/g' *.txt
# 递归替换所有 .md 文件
find . -name "*.md" -exec sed -i 's/old/new/g' {} \;
先预览再替换(去掉 -i 参数):
# 先看看会替换成什么样
sed 's/old/new/g' file.txt
# 确认没问题再加 -i 真正替换
sed -i 's/old/new/g' file.txt
正则表达式示例:
# 替换 IP 地址
sed -i 's/192\.168\.1\.[0-9]\+/10.0.0.1/g' hosts.txt
# 删除行尾空格
sed -i 's/[[:space:]]*$//' file.txt
# 替换多个连续空格为一个
sed -i 's/ \+/ /g' file.txt
2. Vim 编辑
进入命令模式(按 :),然后输入替换命令。
2.1 替换命令对比
| 命令 | 作用 |
|---|---|
s/old/new |
替换当前行第一个匹配 |
s/old/new/g |
替换当前行所有匹配 |
%s/old/new |
替换每一行第一个匹配 |
%s/old/new/g |
替换整个文件所有匹配(最常用) |
%s/old/new/gc |
替换前逐个确认 |
%s/old/new/gi |
忽略大小写替换 |
2.2 常用示例
基本替换:
" 替换整个文件的所有 http 为 https
:%s/http/https/g
" 替换时逐个确认(会提示 y/n/a/q)
:%s/old/new/gc
" 忽略大小写替换
:%s/error/ERROR/gi
指定行范围替换:
" 替换第 10-20 行
:10,20s/old/new/g
" 替换当前行到文件末尾
:.,$s/old/new/g
" 替换前 5 行
:1,5s/old/new/g
正则表达式替换:
" 删除所有空行
:%s/^$//g
" 删除行尾空格
:%s/\s\+$//g
" 给每行开头加上 # 注释
:%s/^/# /g
" 删除所有 HTML 标签
:%s/<[^>]*>//g
可视模式下替换:
- 按
v或V进入可视模式,选中要替换的区域 - 按
:会自动出现:'<,'> - 输入
s/old/new/g完成替换
" 选中区域后会自动变成这样
:'<,'>s/old/new/g