替换(核心命令:sed
)
场景:修改文件中的特定字符串
命令结构:
sed -i 's/原内容/新内容/替换范围' 文件名
关键参数:
-i
:直接修改文件(危险操作!务必备份)s
:替换命令- 替换范围:
g
(全局替换)、行号(如1,5s/.../
替换1-5行)
示例:
- 全局替换(所有匹配项):
sed -i 's/old_text/new_text/g' file.txt
- 指定行替换(仅第3行):
sed -i '3s/old_text/new_text/' file.txt
- 备份原文件(推荐):
sed -i.bak 's/old_text/new_text/g' file.txt # 生成file.txt.bak
文件替换(mv
与 cp
命令)
场景:用新文件覆盖旧文件
-
移动覆盖(
mv
):mv -f 新文件 旧文件 # -f强制覆盖
风险:旧文件永久删除!建议先备份:
cp 旧文件 旧文件.bak && mv 新文件 旧文件
-
复制覆盖(
cp
):cp -f 新文件 旧文件 # 保留新文件副本
批量文件替换(find
+ sed
)
场景:递归修改目录下多个文件内容
find /目标路径 -type f -name "*.txt" -exec sed -i.bak 's/old/new/g' {} \;
解析:
-type f
:仅操作文件-name "*.txt"
:筛选.txt文件-exec
:对每个找到的文件执行后续命令- :代表当前文件路径
\;
:命令结束符
交互式替换工具(vim
)
场景:手动确认替换内容
- 用vim打开文件:
vim file.txt
- 命令模式输入:
:%s/old_text/new_text/gc # c表示每次替换前确认
确认选项:
y
:替换当前匹配n
:跳过a
:替换所有剩余
安全操作黄金法则
- 备份优先:
cp 原文件 原文件.bak # 单文件备份 tar -czvf backup.tar.gz /目标目录 # 目录备份
- 预览结果:
- 移除
sed
的-i
参数先测试(如sed 's/old/new/g' file.txt
)
- 移除
- 权限检查:
ls -l 文件 # 确认当前用户有写权限
- 生产环境:在非关键系统测试后再执行!
替代方案(图形界面)
- Gedit/Kate:文本编辑器的查找替换功能(Ctrl+H)
- VS Code:全局搜索(Ctrl+Shift+F)支持多文件替换
:
- 简单文本替换 →
sed
- 安全覆盖文件 →
cp
+ 备份 - 复杂批量操作 →
find
+sed
- 人工确认 →
vim
交互模式
引用说明基于 GNU Coreutils 官方文档、Linux Man 手册页及 IBM 开发者实践指南,命令测试环境为 Ubuntu 22.04 LTS 和 Bash 5.0,确保跨主流发行版兼容性,操作前请查阅
man [命令]
获取系统特定说明。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9896.html