(译)搜索工具的功能比较
原文 | Github 存储库 |
ack,ag,git-grep,GNU grep 和 ripgrep 的功能比较
如果您对图表有更新,请提交一个 issue。
如果您发现此图表有用,请考虑为您运行的项目制作一个,即使它包含”竞争”项目。最好的项目可能不是你的项目,而这并没有错.
特征 |
ack |
ag |
git grep |
GNU grep |
rg |
搜索哪里 |
随地 |
随地 |
默认情况下使用 git 存储库,或者使用–no-index |
随地 |
随地 |
搜索 git 历史记录 |
|
|
✔ |
|
|
按文件类型,包含/排除文件 |
✔ |
✔ |
|
|
✔ |
按文件扩展名,指定文件类型 |
✔ |
✔ |
|
|
✔ |
通过文件名匹配,指定文件类型 |
✔ |
|
|
|
|
通过匹配模式在文件的第一行, 指定文件类型 |
✔ |
|
|
|
|
配置文件 |
系统级,用户级和项目级 |
|
系统级,用户级和项目级 |
|
|
忽略基于.gitignore 或.ignore 文件的文件 |
|
✔ |
✔ |
|
✔ |
并发 |
|
|
|
|
使用线程 |
确定性输出 |
✔,使用–sort-files |
|
|
|
✔,使用–sort-files |
跨换行符,匹配模式 |
|
✔ |
|
|
|
智能案例搜索 |
✔ |
✔ |
|
|
✔ |
具有布尔表达式的多个模式 |
|
|
✔ |
|
|
按编号打印行 |
✔ |
|
|
|
|
显示与其他匹配的匹配距离 |
✔,在 ack 3 |
|
|
|
|
根据匹配组,为每一行构建输出 |
✔ |
|
|
|
✔ |
限制输出行的长度 |
|
✔ |
|
|
✔ |
下划线 匹配项 ,展示 w/o 颜色 |
✔ |
|
|
|
|
搜寻 gzip 文件 |
|
✔ |
|
|
|
Searching |
ack |
ag |
git-grep |
GNU grep |
rg |
忽略大小写 |
-i --ignore-case |
同 |
同 |
同 |
同 |
智能大小写 搜索 (无论大小,除非模式包括了一个大写字母) |
-S --smart-case |
-S --smart-case |
|
|
-S --smart-case |
启用 区分大小写(最优级) |
-I |
-s --case-sensitive |
--no-ignore-case |
|
-s --case-sensitive |
匹配 全 字 |
-w --word-regexp |
同 |
同 |
同 |
同 |
倒置 匹配 |
-v --invert-match |
同 |
同 |
同 |
同 |
仅匹配整行 |
|
|
|
-x --line-regexp |
-x --line-regexp |
明确指定模式 |
--match |
|
-e |
-e --regexp |
-e --regexp |
从文件中,读取匹配模式 |
|
|
-f |
-f --file |
-f --file |
使用布尔表达式指定多个模式 |
|
|
--and --or --not --all-match |
|
|
跨换行符,匹配模式 |
|
--[no-]multiline |
|
|
|
按编号打印特定行 |
--lines |
|
|
|
|
正则表达式 |
ack |
ag |
git grep |
GNU grep |
rg |
使用固定字符串,而不是正则表达式进行文字匹配 |
-Q --literal |
-Q --literal -F --fixed-strings |
-F --fixed-strings |
-F --fixed-strings --fixed-regexp |
-F --fixed-strings |
使用基本正则表达式 |
|
|
-G --basic-regexp |
-G --basic-regexp |
|
使用扩展的正则表达式 |
|
|
-E --extended-regexp |
-E --extended-regexp |
|
使用 Perl(或 Perl 兼容)正则表达式 |
总是 |
|
-P --perl-regexp |
-P --perl-regexp (experimental) |
|
搜索输出 |
ack |
ag |
git grep |
GNU grep |
rg |
仅打印包含匹配项的文件名 |
-l --files-with-matches |
同 |
同 |
同 |
同 |
仅打印不包含匹配项的文件名 |
-L --files-without-match |
-L --files-without-match |
-L --files-without-match |
-L --files-without-match |
--files-without-match |
仅显示匹配的行的一部分 |
-o |
-o --only-matching |
|
-o --only-matching |
-o --only-matching |
为每个行匹配指定输出 |
--output |
|
|
|
-r --replace |
打印每个匹配的文件名 |
-H --with-filename |
--[no-]filename |
-H |
-H --with-filename |
-H --with-filename |
在输出上,抑制前缀文件名 |
-h --no-filename |
--no-filename |
-h |
-h --no-filename |
--no-filename |
打印相对于项目顶级目录的路径 |
|
|
--full-name |
|
|
将行号前缀为匹配行 |
|
--[no-]numbers |
-n --line-number |
-n --line-number |
-n --line-number |
抑制行号 |
|
--no-numbers |
--no-line-number |
|
-N --no-line-number |
在匹配之前,打印每个文件名称的标题 |
--[no-]heading |
-H --[no-]heading |
--[no-]heading |
|
--[no-]heading |
指定要在 STDIN 上,显示匹配项的文件名 |
|
|
|
--label |
|
显示第一个匹配的列号 |
--[no-]column |
--column |
|
|
--column |
匹配后,打印上下文行 |
-A --after |
同 |
同 |
同 |
同 |
在匹配前,打印上下文行 |
-B --before |
同 |
同 |
同 |
同 |
在匹配前后,打印上下文行 |
-C --context |
同 |
同 |
同 |
同 |
显示每个文件匹配的行数 |
-c --count |
同 |
同 |
同 |
同 |
打印空字节作为文件名之间的分隔符 |
--print0 |
-0 --null --print0 |
-z --null |
-Z --null |
-0 --null |
NUM 匹配后停止在每个文件中搜索 |
-m --max-count |
-m --max-count |
|
-m --max-count |
-m --max-count |
在任何一场匹配后,停止搜索 |
-1 |
|
|
|
|
在每行之前,打印文件中的字节偏移量 |
|
|
|
-b --byte-offset -u --unix-byte-offsets |
|
禁止有关不存在或不可读文件的错误消息 |
-s |
--silent |
|
-s --no-messages |
--no-messages |
限制输出线的长度 |
|
-W --width |
|
|
-M --max-columns |
不要输出匹配的行 |
|
|
-q --quiet |
-q --quiet --silent |
-q --quiet |
打印统计数据(扫描的文件,拍摄的时间等) |
|
--stats --stats-only |
|
|
|
文件演示 |
ack |
ag |
git grep |
GNU grep |
rg |
启用颜色输出 |
--color |
同 |
同 |
同 |
同 |
下划线匹配 |
--underline |
|
|
|
|
设置各种输出项目的颜色 |
--color-match --color-filename --color-lineno --color-colno |
--color-match --color-path --color-line-number |
在.gitconfig 文件中指定 |
在 GREP_COLORS 环境变量中指定 |
--colors |
通过 pager 或其他命令输出管道 |
--[no-]pager |
|
-O --open-files-in-pager |
|
|
除非它们在相邻的行上,否则将匹配输出用空行分开 |
--[no-]proximate |
|
|
|
|
将所有匹配组合在一个文件中 |
--[no-]group |
--[no-]group |
|
|
|
指定组分隔符 |
|
|
|
--[no-]group-separator |
|
显示匹配的函数名称 |
|
|
-p --show-function |
|
|
显示找到匹配项的函数 |
|
|
-W --function-context |
|
|
在不同文件的结果之间打印分隔符 |
--[no-]break |
--[no-]break |
|
|
|
每行都冲洗下输出 |
--flush |
|
|
|
|
文件查找 |
ack |
ag |
git grep |
GNU grep |
rg |
仅打印所选文件,而不进行搜索 |
-f |
|
|
|
--files |
显示每个文件的类型 |
--show-types |
|
|
|
|
列出与模式匹配的可搜索文件 |
-g |
-g |
|
|
|
阅读要从 FILE 中搜索的文件列表 |
--files-from |
|
|
|
|
词法排序找到的文件 |
--sort-files |
|
|
|
--sort-files |
阅读要从 STDIN 搜索的文件列表 |
-x |
|
|
|
|
将搜索限制为与模式匹配的文件名 |
|
-G --file-search-regex |
|
|
|
搜索隐藏文件 |
|
--hidden |
|
|
--hidden |
文件包含/排除 |
ack |
ag |
git grep |
GNU grep |
rg |
仅搜索给定类型的文件 |
--type=X --X (where X is a filetype) |
--X (where X is a filetype) |
|
|
-t --type |
排除给定类型的文件 |
--type=noX --noX (where X is a filetype) |
|
|
|
-T --type-not |
递归到子目录 |
-r -R --[no-]recurse |
-r --recurse |
|
-r --recursive |
|
按照符号链接递归到子目录 |
|
|
|
-R --dereference-recursive |
|
没有下降到子目录 |
-n --no-recurse |
-n --norecurse |
|
|
|
从被忽略的目录列表中添加/删除目录 |
--[no-]ignore-dir |
--ignore-dir |
|
|
|
不要忽视忽略文件(.gitignore,.ignore 等) |
|
|
|
|
--no-ignore --no-ignore-parent --no-ignore-vcs |
忽略大于给定大小的文件 |
|
|
|
|
`–max-文件大小 |
指定要搜索的文件 |
|
|
|
--include |
-g --glob --iglob |
忽略匹配的文件/目录 |
|
--ignore |
|
--exclude --exclude-from --exclude-dir |
--ignore-file |
添加用于忽略文件的过滤器 |
--ignore-file |
|
|
|
|
仅包括 ack 识别的类型的文件 |
-k --known-types |
|
|
|
|
跟随符号链接 |
--[no-]follow |
-f --follow |
|
|
-L --follow |
不要关注其他设备的链接 |
|
--one-device |
|
--devices=skip |
|
搜索所有类型的文件 |
|
-a --all-types |
|
|
|
限制目录搜索深度 |
|
--depth |
--max-depth |
|
--maxdepth |
搜索二进制文件 |
|
--binary |
|
|
|
将文件视为二进制 |
|
|
|
-U --binary |
|
不要搜索二进制文件 |
|
|
-I |
|
|
将二进制文件视为文本 |
|
|
-a --text |
|
-a --text |
搜索所有文本文件 |
|
-t --all-text |
|
|
|
搜索所有文件 |
|
-u --unrestricted |
|
|
-u --unrestricted |
跳过 VCS 中的规则忽略文件(.gitignore,.hgignore 等) |
|
-U --skip-vcs-ignores |
|
|
|
文件类型规范 |
ack |
ag |
git grep |
GNU grep |
rg |
创建文件类型,替换以前的规范 |
--type-set |
|
|
|
|
将规范添加到现有文件类型 |
--type-add |
|
|
|
--type-add |
删除文件类型 |
--type-del |
|
|
|
--type-clear |
忽略默认类型定义 |
--ignore-ack-defaults |
|
|
|
|
显示所有已知类型 |
--help-types |
--list-file-types |
|
|
--type-list |
杂 |
ack |
ag |
git grep |
GNU grep |
rg |
打印所有行,无论是否匹配 |
--passthru |
--passthrough |
|
|
|
输出默认的 ackrc ,以进行自定义到标准输出 |
--create-ackrc |
|
|
|
|
转储有关加载哪些选项的信息 |
--dump |
|
|
|
|
指定要使用的配置文件 |
--ackrc |
|
|
|
|
忽略环境变量和全局配置文件 |
--env |
|
|
|
|
将标准输入视为管道 |
--[no-]filter |
|
|
|
|
搜索压缩文件的内容(例如 gzip) |
|
-z --search-zip |
|
|
|
指定输入文件编码 |
|
|
|
|
-E --encoding |