23 个版本
0.6.0 | 2023年12月27日 |
---|---|
0.5.9 | 2021年4月6日 |
0.5.8 | 2020年11月22日 |
0.5.4 | 2020年4月11日 |
0.2.0 | 2016年2月7日 |
#321 在 开发工具
59 每月下载量
145KB
3K SLoC
amber
amber 是一个由 Rust 编写的代码搜索和替换工具。此工具受到 ack、ag 和其他类似 grep 工具的启发。
功能
有用的默认设置
- 从当前目录递归搜索
- 忽略版本控制系统目录 (.git, .hg, .svn, .bzr)
- 忽略二进制文件
- 以彩色格式输出
多线程搜索
大文件(默认 > 1MB)将被分割并并行搜索。
交互式替换
amber 可以在目录中替换关键字(传统上通过 find ... | xargs sed -i '...'
)。您可以选择是否交互式地进行替换。
安装
Arch Linux
从 AUR 安装 amber-search-git
包。
yaourt -S amber-search-git
Cargo
您可以使用 cargo 进行安装。
cargo install amber
手册
从 发布页面 下载,并将其提取到 PATH 目录中。
用法
提供了两个命令(ambs
/ambr
)。ambs
表示 "amber 搜索",而 ambr
表示 "amber 替换"。默认情况下,搜索关键字不是正则表达式。如果想要使用正则表达式,请添加 --regex
。
ambs keyword // recursively search 'keyword' from the current directory.
ambs keyword path // recursively search 'keyword' from 'path'.
ambr keyword replacement // recursively search 'keyword' from the current directory, and replace to 'replacement' interactively.
ambr keyword replacement path // recursively search 'keyword' from 'path', and replace to 'replacement' interactively.
amber 默认以交互式方式替换。如果找到关键字,则显示以下提示并等待。如果输入 'y'、'Y'、'Yes',则替换关键字。'a'、'A'、'All' 表示非交互式替换所有关键字。
Replace keyword? ( Yes[Y], No[N], All[A], Quit[Q] ):
如果启用了 --regex
选项,则可以在 ambr
的 replacement
中使用正则表达式捕获。
$ cat text.txt
aaa bbb
$ ambr --no-interactive --regex '(aaa) (?<pat>bbb)' '$1 $pat ${1} ${pat}' test.txt
$ cat text.txt
aaa bbb aaa bbb
配置
配置路径
您可以通过编写配置文件来更改配置。配置文件的存储位置取决于操作系统
- Linux:
~/.config/amber/ambs.toml
,/etc/amber/ambs.toml
- macOS:
~/Library/Preferences/com.github.dalance.amber/ambs.toml
,/etc/amber/ambs.toml
- Windows:
~/AppData/Roaming/dalance/amber/config/ambs.toml
为了兼容性,如果存在 ~/.ambs.toml
,则优先于操作系统特定的位置。
上述路径是 ambs
命令配置的示例。同一目录中的 ambr.toml
用于 ambr
命令。
可配置的值
以下列出了可用的条目和默认值
regex = false
column = false
row = false
binary = false
statistics = false
skipped = false
interactive = true
recursive = true
symlink = true
color = true
file = true
skip_vcs = true
skip_gitignore = true
fixed_order = true
parent_ignore = true
line_by_match = false
您可以选择一些条目进行覆盖,如下所示
column = true
基准测试
环境
- CPU: Intel(R) Xeon(R) Gold 6134 CPU @ 3.20GHz
- MEM: 1.5TB
- OS : CentOS 7.5
目标数据
- source1: https://github.com/torvalds/linux ( 52998个文件,2.2GB )
- source2: https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 ( 1个文件,8.5GB )
模式
- pattern1(包含许多匹配的多个文件): 'EXPORT_SYMBOL_GPL' 在 source1 中
- pattern2(包含少量匹配的多个文件): 'irq_bypass_register_producer' 在 source1 中
- pattern3(包含许多匹配的大文件): '検索結果' 在 source2 中
- pattern4(包含少量匹配的大文件): '"Quick Search"' 在 source2 中
比较工具
基准测试工具
hyperfine 以下选项。
--warmup 3
: 将所有数据加载到内存中。
结果
- 搜索 (
compare_ambs.sh
)
模式 | amber | ripgrep | grep |
---|---|---|---|
1 | 212.8ms ( 139% ) | 154.1ms ( 100% ) | 685.2ms ( 448% ) |
2 | 199.7ms ( 132% ) | 151.6ms ( 100% ) | 678.7ms ( 448% ) |
3 | 1.068s ( 100% ) | 4.642s ( 434% ) | 3.869s ( 362% ) |
4 | 1.027s ( 100% ) | 4.409s ( 429% ) | 3.118s ( 304% ) |
- 替换 (
compare_ambr.sh
)
模式 | amber | fastmod | find/sed |
---|---|---|---|
1 | 792.2ms ( 100% ) | 1231ms ( 155% ) | 155724ms ( 19657% ) |
2 | 418.1ms ( 119% ) | 352.4ms ( 100% ) | 157396ms ( 44663% ) |
3 | 18.390s ( 100% ) | 74.282s ( 404% ) | 639.740s ( 3479% ) |
4 | 17.777s ( 100% ) | 74.204s ( 417% ) | 625.756s ( 3520% ) |
依赖关系
~8–22MB
~266K SLoC