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开发工具

Download history 13/week @ 2024-04-08 10/week @ 2024-04-22 41/week @ 2024-04-29 9/week @ 2024-05-06 25/week @ 2024-05-13 109/week @ 2024-05-20 27/week @ 2024-05-27 19/week @ 2024-06-03 29/week @ 2024-06-10 13/week @ 2024-06-17 23/week @ 2024-06-24 7/week @ 2024-07-01 43/week @ 2024-07-08 8/week @ 2024-07-22

59 每月下载量

MIT 许可证

145KB
3K SLoC

amber

Actions Status Crates.io codecov

amber 是一个由 Rust 编写的代码搜索和替换工具。此工具受到 ackag 和其他类似 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 选项,则可以在 ambrreplacement 中使用正则表达式捕获。

$ 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

目标数据

模式

  • 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