美文网首页
Linux下比ack更快的ag搜索命令详解

Linux下比ack更快的ag搜索命令详解

作者: 青枫教学 | 来源:发表于2024-12-25 21:50 被阅读0次

简介

ag 命令(The Silver Searcher)是一款用 C 编写的快速且对开发人员友好的文本搜索工具,针对源代码搜索进行了优化。它与 ack 类似,但速度更快,因此深受开发人员喜爱,可用于搜索代码库。

它最初是 ack 的克隆版,但此后其功能集略有不同。在典型使用中,agack 快 5-10 倍,使用 Pthreads 来利用多个 CPU 核心并行搜索文件。

默认情况下,ag 将忽略文件名匹配 .gitignore.hgignore.ignore,这些文件可以在正在搜索的目录中的任何位置。

安装

  • Debian/Ubuntu
sudo apt update
sudo apt install silversearcher-ag
  • CentOS/Fedora
sudo yum install epel-release
sudo yum install the_silver_searcher
sudo dnf install the_silver_searcher
  • MacOS
brew install the_silver_searcher

常用选项

  • -a, --all-types:搜索所有文件,不包括隐藏文件,也不考虑任何忽略文件

  • -c, --count:仅打印每个文件中的匹配数,而不是匹配行数,如果想要匹配行数,将输出通过管道传输到 wc -l

  • --[no]color:打印时启用颜色或禁用颜色。

  • -D, --debug:调试模式,输出额外调试信息

  • --depth <NUM>:指定搜索深度,-1 表示无限制,默认值为 25。

  • --[no]filename:打印文件名,默认启用

  • -g <PATTERN>:指定正则表达式

  • -G, --file-search-regex <PATTERN>:仅搜索名称与 PATTERN 匹配的文件

  • --hidden:搜索隐藏的文件,但应用忽略文件指定的文件

  • --ignore <PATTERN>:忽略名称与此模式匹配的文件/目录

  • --ignore-dir <NAME>--ignore 的别名,与 ack 兼容

  • -i, --ignore-case:忽略大小写

  • -l --files-with-matches:仅打印包含匹配项的文件的名称,而不是匹配的行。

  • -L, --files-without-matches:仅打印不包含匹配项的文件的名称

  • --list-file-types:列出能识别的文件类型

  • -n, --norecurse:不递归

  • --[no]numbers:打印/不打印行号,默认是忽略行号

  • -o, --only-matching:仅打印行的匹配部分

  • -p, --path-to-ignore <STRING>:指定 .ignore 文件的路径

  • --pager <COMMAND>:指定分页器,如 less

  • --parallel:并行搜索,智能拆分搜索的词,如:

echo "foo\nbar\nbaz" | parallel "ag {} ."

# 将会启用三个实例并行搜索foo、bar、baz
  • -Q, --literal:不将 PATTERN 解析为正则表达式,尝试按普通字符串进行匹配

  • -r, --recurse:递归搜索目录,默认启用

  • -s, --case-sensitive:启用大小写敏感匹配

  • -S, --smart-case:如果 PATTERN 中有大写字母,则匹配区分大小写,否则不区分大小写,默认启用

  • --search-binary:搜索二进制文件以查找匹配项

  • --silent:抑制所有日志消息,包括错误

  • -t, --all-text:搜索所有文本文件,不包括隐藏文件

  • -u, --unrestricted:宽松模式,搜索所有文件,包括二进制、隐藏文件,忽略掉 ignore 文件指定的文件。

  • -v, --invert-match:反向匹配

  • -V, --version:打印版本信息

  • --vimgrep:输出结果与 Vim:vimgrep /pattern/g 格式相同

~/.vimrc 中配置:

set grepprg=ag\ --vimgrep\ $* set grepformat=%f:%l:%c:%m
  • -w, --word-regexp:仅匹配整个单词

  • --workers <NUM>:指定 <NUM> 个工作线程,默认值为 CPU 核心数,最多为 8 个

  • -z, --search-zip:搜索压缩文件的内容,目前支持 gzxz

  • -0, --null, --print0:使用 \0 而不是 \n 分隔文件名,允许 xargs -0 <command> 正确处理包含空格或换行符的文件名。

  • ---- 用于表示其余参数不应被视为选项,如:

ag -- --foo

示例用法

在当前目录下搜索

ag "<pattern>"

# 如:
ag "function"

指定文件的类型搜索

ag "pattern" --python

# 仅在 Python 文件中搜索“class”

列出 ag 能识别的文件类型

ag --list-file-types

忽略大小写

ag -i "pattern"

在指定文件或目录中搜索

ag "pattern" path/to/file_or_dir

仅显示匹配到的文件名

ag -l "pattern"

统计匹配到的次数

ag -c "pattern"

显示行号

ag -n "pattern"

搜索时排除指定的文件或目录

ag "pattern" --ignore-dir=<dir_name>

# 如:
ag "TODO" --ignore-dir=node_modules

使用正则表达式搜索

ag "^class\s\w+"

# 匹配以 class 开头、后跟空格和单词的行

反向匹配(显示不匹配的行)

ag -v "pattern"

限制搜索的深度

ag "pattern" --depth=2

仅在 JavaScript 文件中搜索

ag "debugger" --js

同时在多个文件或目录中搜索

ag UNIX foo bar foobar

# UNIX 是要搜索的字符串
# 后面都是文件名

相关文章

  • 命令行提高用户体验的神器

    ag 比grep,ack更快的递归搜索文件内容ag,grep,ack性能对比的链接 ag安装 ag简单使用 tig...

  • 有哪些命令行的软件堪称神器?

    ag 比grep、ack更快的递归搜索文件内容。 tig 字符模式下交互查看git项目,可以替代git命令。 my...

  • 相见恨晚的15个 Linux 神器,你可能一个都没见过

    ag:比grep、ack更快的递归搜索文件内容。 tig:字符模式下交互查看git项目,可以替代git命令。 jq...

  • 20个堪称神器的命令行软件

    1.ag:比grep、ack更快的递归搜索文件内容。 2.tig:字符模式下交互查看git项目,可以替代git命令...

  • Linux 命令

    学一个记一个Tab 自动补全grap 文本搜索命令ack linux下的高效代码搜索工具-ack

  • iOS高级强化--013:Shell常用命令

    ag命令 ag:超快的文件搜索工具,与grep相比,搜索速度更快。 语法:ag [可选项] [匹配模式] [路径]...

  • 16.Linux - 搜索

    参考: 1. 搜索 - ag 参考:Ack/Ag 码农必备工具官网 - github 类似:ack 安装:yum ...

  • ag - the Silver Searcher

    简介 一个类似于 ack 的,速度更快的代码搜索器。 详细内容请查看: ag 用法 格式: 部分参数简介 - Op...

  • Linux

    linux awk命令详解、linux awk命令Linux常用操作指令Linux netstat命令详解 awk...

  • 安装VIM插件之Ack篇

    前言 通过安装ag和ack.vim,给vim提供全局搜索代码的功能 安装以及配置 安装Ag 装好之后,可以直接在s...

网友评论

      本文标题:Linux下比ack更快的ag搜索命令详解

      本文链接:https://www.haomeiwen.com/subject/ayvbejtx.html