当前位置: 首页 > article >正文

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

简介

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 是要搜索的字符串
# 后面都是文件名

http://www.kler.cn/a/453570.html

相关文章:

  • 深度学习-78-大模型量化之Quantization Aware Training量化感知训练QAT
  • (亲测)frp对外提供简单的文件访问服务-frp静态文件效果
  • 一文大白话讲清楚javascript单点登录
  • linux RCU调优
  • 极狐GitLab 17.7正式发布,可从 GitLab 丝滑迁移至极狐GitLab【二】
  • CSS中的calc函数使用
  • 基于QT(C++)+MySQL实现的旅行模拟器
  • Idea 添加tomcat 并发布到tomcat
  • ubuntu22.04安装PPOCRLabel
  • 踏踏实实练SQLday1-2 lead/lag使用(股票波峰波谷)
  • cesium通过经纬度获取3dtiles 得feature信息
  • Eclipse 修改项目栏字体大小
  • ADB 上传文件并使用脚本监控上传百分比
  • USB Hub 检测设备
  • Android APP 集成本地大模型 LLM
  • datax ubuntu安装
  • 华为 AI Agent:企业内部管理的智能变革引擎(11/30)
  • E-commerce .net+React(一)——项目初始化
  • Mac上Stable Diffusion的环境搭建(还算比较简单)
  • DevOps 中的 AI:测试始终是一个关键领域
  • 【ES6复习笔记】Promise对象详解(12)
  • cad学习 day7-9
  • 数据结构 C/C++(实验六:查找)
  • 35. TCP网络编程
  • 2024国赛A题第一问
  • 【ubuntu基础软件安装】