name: find-replace description: “使用 sd 进行现代化查找和替换(比 sed 更简单)和批量替换模式。触发词:sd、查找替换、批量替换、sed 替换、字符串替换、重命名。” compatibility: “需要 sd CLI 工具。安装:brew install sd (macOS) 或 cargo install sd (跨平台)。” allowed-tools: “Bash”
查找与替换
使用 sd 进行现代化查找和替换。
sd 基础
# 在文件中替换(原地修改)
sd '旧文本' '新文本' 文件.txt
# 在多个文件中替换
sd '旧文本' '新文本' *.js
# 预览而不修改(管道)
cat 文件.txt | sd '旧' '新'
sd 与 sed 对比
| sed | sd |
|---|---|
sed 's/旧/新/g' |
sd '旧' '新' |
sed -i 's/旧/新/g' |
sd '旧' '新' 文件 |
sed 's#路径/到#新/路径#g' |
sd '路径/到' '新/路径' |
关键区别: sd 默认全局替换,没有分隔符问题。
常用模式
# 变量/函数重命名
sd '旧名称' '新名称' src/**/*.ts
# 单词边界(避免部分匹配)
sd '\b旧名称\b' '新名称' src/**/*.ts
# 导入路径更新
sd "from '../utils'" "from '@/utils'" src/**/*.ts
# 捕获组
sd 'console\.log\((.*)\)' 'logger.info($1)' src/**/*.js
安全的批量工作流
# 1. 列出受影响的文件
rg -l '旧模式' src/
# 2. 预览替换
rg '旧模式' -r '新模式' src/
# 3. 应用替换
sd '旧模式' '新模式' $(rg -l '旧模式' src/)
# 4. 验证
rg '旧模式' src/ # 应该没有返回结果
git diff # 审查更改
特殊字符
| 字符 | 转义 |
|---|---|
. |
\. |
* |
\* |
[ ] |
\[ \] |
$ |
\$ |
\ |
\\ |
提示
| 提示 | 原因 |
|---|---|
始终先用 rg -r 预览 |
避免错误 |
| 批量更改前使用 git | 易于回滚 |
使用 \b 表示单词边界 |
避免部分匹配 |
| 引用模式 | 防止 shell 解释 |
额外资源
有关详细模式,请加载:
./references/advanced-patterns.md- 正则表达式、批量工作流、真实示例