[自述文件|用户指南 |索引 |基准 |问答]
选项 -Q 打开查询 TUI 以在您键入时搜索文件!
ugrep 速度快、用户友好,并且配备了大量用户想要的新功能
包括带有内置帮助的交互式 TUI、带有 AND/OR/NOT 模式的类似 Google 搜索、模糊搜索、搜索(嵌套)zip/7z/tar/pax/cpio 档案、tarball 和压缩文件 gz/Z/bz/ bz2/lzma/xz/lz4/zstd/brotli,搜索和hexdump二进制文件,搜索PDF、doc、docx等文档,并以JSON、XML、CSV格式输出或您自己定制的格式
Unicode 扩展正则表达式模式语法,具有多行模式匹配,无需特殊命令行选项
包括文件索引器,以加快搜索慢速和冷文件系统的速度
GNU grep 的真正直接替代品(假设您将ug
复制或符号链接到grep
、 egrep
和fgrep
),不像其他流行的 grep 声称是“grep 替代品”或“替代品”,而实际上它们实现了不兼容的命令行选项并使用不兼容的正则表达式匹配器,即当 ugrep 支持所有正则表达式时,Perl 正则表达式仅与 POSIX BRE (grep) 和 ERE (egrep) 相对模式
基准测试表明 ugrep 是使用基于 DFA 的高性能正则表达式匹配器 RE/flex 最快的 grep 之一
如果需要改进或添加到 ugrep 中,请告诉我!
#1 优先事项是质量保证,以继续确保 ugrep 没有错误并且可靠
使 ugrep 运行得更快,例如参见#432、#421
分享可重复的性能结果
ug
用于交互式使用,它根据您的首选项加载位于工作目录或主目录中的可选 .ugrep 配置文件, ug+
还搜索 pdf、文档、电子书、图像元数据
ugrep
用于批量使用,如没有 .ugrep 配置文件的 GNU grep, ugrep+
还可以搜索 pdf、文档、电子书、图像元数据
默认匹配 Unicode 模式并自动搜索 UTF-8、UTF-16 和 UTF-32 编码文件
与正则表达式模式中的n
或R
匹配多行,不需要特殊选项即可执行此操作!
内置帮助: ug --help
,其中ug --help WHAT
显示与您要查找的WHAT
相关的选项
ug --help regex
、 ug --help globs
、 ug --help fuzzy
、 ug --help format
。
用户友好,可自定义配置文件,由ug
命令使用,用于交互式使用,根据您的首选项加载 .ugrep 配置文件
ug PATTERN ... ugrep --config PATTERN ...
ug --save-config ...options-you-want-to-save...
将 .ugrep 配置文件保存在工作目录中,以便下次运行ug
时它会使用这些选项。在您的主目录中执行此操作,以保存包含您通常想要使用的选项的 .ugrep 配置文件。
交互式查询 TUI,按 F1 或 CTRL-Z 获取帮助,按 TAB/SHIFT-TAB 导航到目录和文件
ug -Q ug -Q -e PATTERN
-Q
替换命令行上的PATTERN
,以便您在 TUI 中以交互方式输入模式。在 TUI 中,使用 ALT+字母键打开/关闭短“字母选项”,例如 ALT-n(选项-n
)显示/隐藏行号。
搜索档案(zip、tar、pax、jar、cpio、7z)和压缩文件(gz、Z、bz、bz2、lzma、xz、lz4、zstd、brotli)的内容
ug -z PATTERN ... ug -z --zmax=2 PATTERN ...
指定-z --zmax=2
搜索压缩文件和嵌套在存档中的存档。 --zmax
参数的范围可以从 1(默认)到 99,最多可进行 99 个解压缩和解存档步骤来搜索嵌套存档
使用与 Google 类似的布尔查询模式进行搜索,使用-%
模式与AND
(或仅空格)、 OR
(或条|
)、 NOT
(或破折号-
),使用引号精确匹配,并使用( )
分组(显示在下面的左侧);或使用选项-e
(作为“或”)、 --and
、 --andnot
和--not
正则表达式模式(如下右侧所示):
ug -% 'A B C' ... ug -e 'A' --and 'B' --and 'C' ...
ug -% 'A|B C' ... ug -e 'A' -e 'B' --and 'C' ...
ug -% 'A -B -C' ... ug -e 'A' --andnot 'B' --andnot 'C' ...
ug -% 'A -(B|C)'... ug -e 'A' --andnot 'B' --andnot 'C' ...
ug -% '"abc" "def"' ... ug -e 'QabcE' --and 'QdefE' ...
其中A
、 B
和C
是任意正则表达式模式(使用选项-F
搜索字符串)
指定选项-%%
( --bool --files
) 将布尔查询应用于整个文件:如果通过文件范围内的匹配模式满足所有布尔条件,则文件匹配。否则,布尔条件默认应用于单行,因为 grep 实用程序通常是基于行的模式匹配器。选项--stats
在搜索完成后以人类可读的形式显示查询。
使用与文件扩展名关联的过滤器,通过ug+
搜索 pdf、doc、docx、电子书等:
ug+ PATTERN ...
或指定--filter
与文件类型以使用过滤器实用程序:
ug --filter='pdf:pdftotext % -' PATTERN ...
ug --filter='doc:antiword %' PATTERN ...
ug --filter='odt,docx,epub,rtf:pandoc --wrap=preserve -t plain % -o -' PATTERN ...
ug --filter='odt,doc,docx,rtf,xls,xlsx,ppt,pptx:soffice --headless --cat %' PATTERN ...
ug --filter='pem:openssl x509 -text,cer,crt,der:openssl x509 -text -inform der' PATTERN ...
ug --filter='latin1:iconv -f LATIN1 -t UTF-8' PATTERN ...
ug+
命令与ug
命令相同,但也使用过滤器来搜索 PDF、文档和图像元数据
使用选项-o
( --only-matching
) 和上下文选项-ABC
显示水平上下文,例如在很长的行中查找匹配项,例如 Javascript 和 JSON 源:
ug -o -C20 -nk PATTERN longlines.js
-o -C20
适合所有与上下文匹配的前 20 个字符和后 20 个字符(即总共 40 个 Unicode 字符), -nk
输出行号和列号。
在指定的编辑距离内通过模糊搜索查找近似模式匹配
ug -Z PATTERN ... ug -Z3 PATTTERN ...
-Zn
最多匹配n
额外、缺失或替换的字符, -Z+n
最多匹配n
额外字符, -Zn
最多匹配n
缺失字符, -Z~n
最多匹配n
替换字符。 -Z
默认为-Z1
。
使用正则表达式(或使用-F
的固定字符串)进行类似 Fzf 的搜索,使用-Z+4
进行最多 4 个额外字符的模糊匹配,仅使用-w
进行单词匹配,使用-%%
进行文件范围的布尔搜索
ug -Q -%% -l -w -Z+4 --sort=best
-l
列出 TUI 中的匹配文件,按TAB
然后按ALT-y
查看文件, SHIFT-TAB
和Alt-l
返回查看按最佳匹配排序的匹配文件列表
搜索二进制文件并显示具有二进制模式匹配的十六进制转储(Unicode 文本或-U
表示字节模式)
ug --hexdump -U BYTEPATTERN ... ug --hexdump TEXTPATTERN ...
ug -X -U BYTEPATTERN ... ug -X TEXTPATTERN ...
ug -W -U BYTEPATTERN ... ug -W TEXTPATTERN ...
--hexdump=4chC1
显示4
列十六进制,没有字符列c
,没有十六进制间距h
,并且在匹配之前和之后有一个额外的十六进制行C1
。
包含要按文件类型或文件“魔字节”搜索的文件,或使用^
排除它们
ug -t TYPE PATTERN ... ug -t ^TYPE PATTERN ...
ug -M 'MAGIC' PATTERN ... ug -M '^MAGIC' PATTERN ...
包含要搜索的与 gitignore 风格的 glob 匹配的文件和目录,或使用^
排除它们
ug -g 'FILEGLOB' PATTERN ... ug -g '^FILEGLOB' PATTERN ...
ug -g 'DIRGLOB/' PATTERN ... ug -g '^DIRGLOB/' PATTERN ...
ug -g 'PATH/FILEGLOB' PATTERN ... ug -g '^PATH/FILEGLOB' PATTERN ...
ug -g 'PATH/DIRGLOB/' PATTERN ... ug -g '^PATH/DIRGLOB/' PATTERN ...
包含要按文件扩展名(后缀)搜索的文件,或使用^
( -g"*.EXT"
的简写)排除它们
ug -O EXT PATTERN ... ug -O ^EXT PATTERN ...
包括要搜索的隐藏文件(点文件)和目录(默认情况下省略)
ug -. PATTERN ... ug -g'.*,.*/' PATTERN ...
在 .ugrep 中指定hidden
始终使用ug
搜索隐藏文件。
排除 .gitignore 等指定的文件。
ug --ignore-files PATTERN ... ug --ignore-files=.ignore PATTERN ...
在 .ugrep 中指定ignore-files
以便始终使用ug
忽略它们。根据需要添加额外的ignore-files=...
排除否定模式的搜索模式(“匹配这个但不匹配那个”)
ug -e PATTERN -N NOTPATTERN ... ug -e '[0-9]+' -N 123 ...
使用预定义的正则表达式模式来搜索源代码、javascript、XML、JSON、HTML、PHP、markdown 等。
ug PATTERN -f c++/zap_comments -f c++/zap_strings ...
ug PATTERN -f php/zap_html ...
ug -f js/functions ... | ug PATTERN ...
按名称、最佳匹配、大小和时间对匹配文件进行排序
ug --sort PATTERN ... ug --sort=size PATTERN ...
ug --sort=changed PATTERN ... ug --sort=created PATTERN ...
ug -Z --sort=best PATTERN ... ug --no-sort PATTERN ...
以 CSV、JSON、XML 和用户指定格式输出结果
ug --csv PATTERN ... ug --json PATTERN ...
ug --xml PATTERN ... ug --format='file=%f line=%n match=%O%~' PATTERN ...
ug --help format
显示有关自定义输出的格式%
字段的帮助。
使用 PCRE 的 Perl 兼容正则表达式模式进行搜索并显示或替换子模式匹配
ug -P PATTERN ... ug -P --format='%1 and %2%~' 'PATTERN(SUB1)(SUB2)' ...
使用 -P 和 --replace 替换文本替换输出中的模式,可选地包含%
格式字段,使用-y
传递文件的其余部分:
ug --replace='TEXT' PATTERN ... ug -y --replace='TEXT' PATTERN ...
ug --replace='(%m:%o)' PATTERN ... ug -y --replace='(%m:%o)' PATTERN ...
ug -P --replace='%1' PATTERN ... ug -y -P --replace='%1' PATTERN ...
ug --help format
显示有关 format %
字段的帮助,可以选择与--replace
一起使用。
搜索具有特定编码格式的文件,例如 ISO-8859-1 至 16、CP 437、CP 850、MACROMAN、KOI8 等。
ug --encoding=LATIN1 PATTERN ...
使用 Homebrew 安装最新的 ugrep:
$ brew install ugrep
或使用 MacPorts 安装:
$ sudo port install ugrep
这将安装ugrep
和ug
命令,其中ug
与ugrep
相同,但还会加载工作目录或主目录中存在的配置文件 .ugrep。
使用 Winget 安装winget install Genivia.ugrep
或者使用 Chocolatey choco install ugrep
安装
或者使用 Scoop scoop install ugrep
安装
或者从 https://github.com/Genivia/ugrep/releases 下载全功能的ugrep.exe
可执行文件作为发布工件。压缩版本包含主要的ugrep.exe
二进制文件以及ug.exe
。 ug
命令用于交互式使用,从.ugrep
配置文件(当存在于工作目录或主目录中时)加载和读取设置。
将ugrep.exe
和ug.exe
添加到您的执行路径:转到“设置”并在“查找设置”中搜索“路径”。选择环境变量->路径->新建,然后添加放置ugrep.exe
和ug.exe
可执行文件的目录。
提示
在 Windows 命令行上使用ugrep.exe
和ug.exe
的实用提示:
'
引号,而是使用"
;大多数 Windows 命令实用程序将单'
引号视为命令行参数的一部分!-g/GLOB
指定,而不是使用通常的GLOB
命令行参数来选择要搜索的文件和目录,特别是对于递归搜索;""
来匹配所有输入时,某些Windows命令解释器(例如Powershell)可能会忽略它,在这种情况下,您必须指定选项--match
;R
而不是n
来匹配任何 Unicode 换行符,例如rn
对以及单个r
和n
。 $ apk add ugrep ugrep-doc
检查 https://pkgs.alpinelinux.org/packages?name=ugrep 了解版本信息。
$ pacman -S ugrep
检查 https://archlinux.org/packages/extra/x86_64/ugrep 了解版本信息。
首先启用 EPEL 存储库,然后就可以安装 ugrep。
$ dnf install ugrep
检查 https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ 以获取版本信息。
$ apt-get install ugrep
检查 https://packages.debian.org/ugrep 了解版本信息。要在本地构建并尝试ugrep
,请参阅下面的“所有平台”构建步骤。
$ dnf install ugrep
检查 https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ 以获取版本信息。
$ pkg install ugrep
检查 https://www.freshports.org/textproc/ugrep 了解版本信息。
$ pkgman install cmd:ugrep
检查 https://github.com/haikuports/haikuports/tree/master/app-text/ugrep 了解版本信息。要在本地构建并尝试ugrep
,请参阅下面的“所有平台”构建步骤。
您可以使用标准 NetBSD 软件包安装程序 (pkgsrc):http://cdn.netbsd.org/pub/pkgsrc/current/pkgsrc/textproc/ugrep/README.html
$ pkg_add ugrep
检查 https://openports.pl/path/sysutils/ugrep 以获取版本信息。
$ zypper install ugrep
检查 https://build.opensuse.org/package/show/utilities/ugrep 了解版本信息。
首先启用 EPEL 存储库,然后就可以安装 ugrep。
$ dnf install ugrep
检查 https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ 以获取版本信息。
克隆ugrep
$ git clone https://github.com/Genivia/ugrep
或者访问 https://github.com/Genivia/ugrep/releases 下载特定版本。
当您需要这些功能时,您可以随时添加这些功能:
选项-P
(Perl 正则表达式)需要 PCRE2 库(推荐)或 Boost.Regex 库(可选后备)。如果未安装 PCRE2,请使用sudo apt-get install -y libpcre2-dev
安装 PCRE2 或下载 PCRE2 并按照安装说明进行操作。或者,下载 Boost.Regex 并运行./bootstrap.sh
和sudo ./b2 --with-regex install
。请参阅Boost:入门。
选项-z
(压缩文件和档案搜索)需要安装 zlib 库。它安装在大多数系统上。如果没有,请安装它,例如使用sudo apt-get install -y libz-dev
。要搜索.bz
和.bz2
文件,请安装 bzip2 库(推荐),例如使用sudo apt-get install -y libbz2-dev
。要搜索.lzma
和.xz
文件,请安装 lzma 库(推荐),例如使用sudo apt-get install -y liblzma-dev
。要搜索.lz4
文件,请安装 lz4 库(可选,不是必需),例如使用sudo apt-get install -y liblz4-dev
。要搜索.zst
文件,请安装 zstd 库(可选,不是必需的),例如使用sudo apt-get install -y libzstd-dev
。要搜索.br
文件,请安装 brotli 库(可选,不是必需的),例如使用sudo apt-get install -y libbrotli-dev
。要搜索.bz3
文件,请安装 bzip3 库(可选,不是必需),例如使用sudo apt-get install -y bzip3
。
提示
即使您的系统具有命令行实用程序(例如bzip2
,也并不一定意味着安装了libbz2
等开发库。应安装开发库。
某些 Linux 系统可能未配置为从/usr/local/lib
加载动态库,从而导致运行ugrep
时出现库加载错误。要更正此问题,请将export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
添加到~/.bashrc
文件中。或者运行sudo ldconfig /usr/local/lib
。
执行./build.sh
脚本来构建ugrep
:
$ cd ugrep
$ ./build.sh
这会使用./configure
和make -j
在ugrep/src
目录中构建ugrep
可执行文件,并使用make test
进行验证。当所有测试通过后, ugrep
可执行文件将复制到ugrep/bin/ugrep
,并为ug
命令添加符号链接ugrep/bin/ug -> ugrep/bin/ugrep
。
请注意, ug
与ugrep
相同,但也会加载工作目录或主目录中存在的配置文件 .ugrep。这意味着您可以在 .ugrep 中定义ug
的默认选项。
可以使用./build.sh
指定已安装或本地库的替代路径。要获取有关可用构建选项的帮助:
$ ./build.sh --help
您可以通过指定来构建静态可执行文件:
$ ./build.sh --enable-static
如果库不静态链接(例如 brotli),这可能会失败。在这种情况下,请尝试./build.sh --enable-static --without-brotli
。
您可以构建启用自定义默认值的ugrep
,例如寻呼机:
$ ./build.sh --enable-pager
选择构建默认值的选项包括:
--help
显示构建选项--enable-static
构建静态可执行文件(如果可能)--enable-hidden
始终搜索隐藏文件和目录--enable-pager
始终使用寻呼机在终端上显示输出--enable-pretty
对终端的输出进行着色并添加文件名标题--disable-auto-color
禁用自动颜色,需要 ugrep 选项--color=auto
显示颜色--disable-mmap
禁用内存映射文件--disable-sse2
禁用 SSE2 和 AVX 优化--disable-avx2
禁用 AVX2 和 AVX512BW 优化,但在支持时使用 SSE2 进行编译--disable-neon
禁用 ARM NEON/AArch64 优化--with-grep-path
如果未定义GREP_PATH
则为默认-f
路径--with-grep-colors
如果未定义GREP_COLORS
则为默认颜色构建完成后,将ugrep/bin/ugrep
和ugrep/bin/ug
复制到一个方便的位置,例如~/bin
目录中。或者,如果您可能想安装ugrep
和ug
命令和手册页:
$ sudo make install
这还会在/usr/local/share/ugrep/patterns/
处安装带有选项-f
的预定义模式的模式文件。选项-f
首先检查工作目录是否存在模式文件,如果没有找到,则检查环境变量GREP_PATH
以加载模式文件,如果没有找到,则读取已安装的预定义模式文件。
不幸的是,git 克隆不保留时间戳,这意味着您可能会遇到“警告:系统上缺少‘aclocal-1.15’”。或者运行make
时未找到自动标头。
要解决此问题,请运行:
$ autoreconf -fi
$ ./build.sh
GCC 8 及更高版本可能会产生类似“注意:参数传递的参数...在 GCC 7.1 中已更改”的警告。应忽略这些警告。
包含一个 Dockerfile,用于在 Ubuntu 容器中构建ugrep
。
开发人员可能希望在进行重大更改时使用 sanitizer 来验证ugrep代码,例如使用 ThreadSanitizer 检测数据争用:
$ ./build.sh CXXFLAGS='-fsanitize=thread -O1 -g'
我们使用 clang AddressSanitizer、MemorySanitizer、ThreadSanitizer 和 UndefinedBehaviorSanitizer 检查了ugrep
。这些选项会产生大量的运行时开销,不应用于最终构建。
?返回目录
请注意, ugrep和ug命令默认搜索二进制文件,并且不会忽略 .gitignore 指定的文件,这不会使递归搜索性能比较有意义,除非使用选项-I
和--ignore-files
。要使这些选项成为ug的默认选项,只需将ignore-binary
和ignore-files
添加到您的 .ugrep 配置文件中。
有关最新 ugrep 的最新性能比较,请参阅 ugrep 性能基准。 Ugrep 比 GNU grep、Silver Searcher、ack、sift 更快。 Ugrep 的速度在大多数基准测试中都优于 ripgrep。
首先,我们在 Vim 中定义:grep
命令来递归搜索文件。为此,请将以下行添加到位于根目录中的.vimrc
中:
if executable('ugrep')
set grepprg=ugrep -RInk -j -u --tabs=1 --ignore-files
set grepformat=%f:%l:%c:%m,%f+%l+%c+%m,%-G%f\|%l\|%c\|%m
endif
这使用 Vim :grep
命令指定-j
不区分大小写的搜索。对于区分大小写的搜索,请从grepprg
中删除 -j
。同一行上的多个匹配项会分别在快速修复窗口中列出。如果不需要,请从grepprg
中删除 -u
。通过此更改,仅显示一行中的第一个匹配项。选项--ignore-files
会跳过.gitignore
文件中指定的文件(如果存在)。要将递归搜索的深度限制为仅当前目录,请将 -1
附加到grepprg
。
现在,您可以在 Vim 中调用 Vim :grep
命令来搜索指定PATH
上的文件以查找PATTERN
匹配项:
:grep PATTERN [PATH]
如果省略PATH
,则会搜索工作目录。使用%
作为PATH
仅搜索 Vim 中当前打开的文件:
:grep PATTERN %
:grep
命令在快速修复窗口中显示结果,使您可以快速跳转到找到的匹配项。
要打开包含最新匹配列表的快速修复窗口:
:copen
双击该窗口中的一行(或选择一行并按 ENTER)可跳转到匹配的文件和文件中的位置。输入命令:cn
和:cp
分别跳转到下一个或上一个匹配项。要更新快速修复窗口中的搜索结果,只需 grep 即可。例如,要在工作目录中递归搜索标记为FIXME
C++ 源代码:
:grep -tc++ FIXME
要关闭快速修复窗口:
:cclose
您可以将ugrep选项与:grep
命令一起使用,例如选择当前文件中的单行和多行注释:
:grep -f c++/comments %
Quickfix 中仅显示多行注释的第一行,以节省空间。要显示多行匹配的所有行,请从grepformat
中删除%-G
。
一个流行的 Vim 工具是 ctrlp.vim,它是通过以下命令安装的:
$ cd ~/.vim
$ git clone https://github.com/kien/ctrlp.vim.git bundle/ctrlp.vim
CtrlP 通过将以下行添加到.vimrc
来使用ugrep :
if executable('ugrep')
set runtimepath^=~/.vim/bundle/ctrlp.vim
let g:ctrlp_match_window='bottom,order:ttb'
let g:ctrlp_user_command='ugrep "" %s -Rl -I --ignore-files -3'
endif
其中-I
跳过二进制文件,选项--ignore-files
跳过.gitignore
文件中指定的文件(如果存在),选项-3
将搜索目录限制为三个级别(工作目录以及下面最多两个级别)。
启动 Vim 然后输入命令:
:helptags ~/.vim/bundle/ctrlp.vim/doc
要在 Vim 中查看 CtrlP 文档,请输入命令:
:help ctrlp.txt
?返回目录
感谢 Manuel Uberti,您现在可以在 Emacs 中使用ugrep 。要在 Emacs 中使用ugrep而不是 GNU grep,请将以下行添加到.emacs.d/init.el
文件中:
(setq-default xref-search-program ‘ugrep)
这意味着依赖 Xref 的 Emacs 命令(例如project-find-regexp
现在可以利用ugrep的强大功能。
此外,可以在 Emacs grep 命令中使用grep
。例如,您可以通过将grep-template
自定义为如下所示,使用ugrep
运行lgrep
:
(setq-default grep-template "ugrep --color=always -0Iinr -e <R>")
如果您没有 Emacs 版本 29(或更高版本),您可以从 Emacs master 分支下载并构建 Emacs,或者手动启用 Xref 与ugrep集成:
(with-eval-after-load 'xref
(push '(ugrep . "xargs -0 ugrep <C> --null -ns -e <R>")
xref-search-program-alist)
(setq-default xref-search-program 'ugrep))
?返回目录
开箱即用的ugrep支持所有标准 GNU/BSD grep 命令行选项,并改进了其中的许多选项。有关详细信息,请参阅相对于 grep 的显着改进。
如果您想完全遵循 GNU/BSD grep ASCII/LATIN1 非 UTF Unicode 模式,请使用选项-U
禁用完整的 Unicode 模式匹配。
事实上,使用选项-U
、 -Y
、 -.
执行ugrep
。和--sort
使其行为与egrep
完全相同,仅匹配 ASCII/LATIN1 非 UTF Unicode 模式,允许空模式匹配和搜索隐藏文件而不是忽略它们。请参阅 grep 等效项。
您可以使用或不使用选项-U
、 -Y
、 -.
和 -- 根据需要--sort
或包含其他选项。
或者,您可以通过将ugrep
复制到这些名称来创建grep
、 egrep
和fgrep
可执行文件。当ugrep
(或ugrep.exe
)可执行文件被复制为grep
( grep.exe
)、 egrep
( egrep.exe
)、 fgrep
( fgrep.exe
) 时,然后是选项-U
、 -Y
和-.
与grep
的-G
、 egrep
的-E
和fgrep
的-F
一起自动启用。此外,当复制为zgrep
、 zegrep
和zfgrep
时,会启用选项-z
。例如,当ugrep
复制为zegrep
时,选项-z
、 -E
、 -Y
、 -.
和--sort
已启用。
同样,到ugrep
的符号链接和硬链接也可以很好地创建grep
、 egrep
和fgrep
替代品。例如,要创建符号链接egrep
:
sudo ln -s `which ugrep` /opt/local/bin/egrep
/opt/local/bin
只是一个示例,可能会或可能不会在您的$path
中,并且在执行egrep
时可能会或可能不会找到,具体取决于您的$path
。
当使用以下选项时, ugrep相当于 GNU/BSD grep:
grep = ugrep -G -U -Y -. --sort -Dread -dread
egrep = ugrep -E -U -Y -. --sort -Dread -dread
fgrep = ugrep -F -U -Y -. --sort -Dread -dread
zgrep = ugrep -z -G -U -Y -. --sort -Dread -dread
zegrep = ugrep -z -E -U -Y -. --sort -Dread -dread
zfgrep = ugrep -z -F -U -Y -. --sort -Dread -dread
在哪里:
-U
禁用 Unicode 宽字符模式匹配,因此例如模式xa3
匹配字节 A3,而不是 UTF-8 序列 C2 A3 表示的 Unicode 代码点 U+00A3。默认情况下,在 ugrep 中, xa3
匹配 U+00A3。我们不建议使用-U
进行文本模式搜索,仅用于二进制搜索或搜索 latin-1 (iso-8859-1) 文件而不将这些文件报告为二进制文件(自 ugrep v3.5.0 起)。-Y
启用空匹配,因此例如模式a*
匹配每一行而不是a
序列。默认情况下,在 ugrep 中,模式a*
与a
的序列匹配。此外,在 ugrep 中,模式a*b*c*
与默认情况下应该匹配的内容相匹配。查看改进。-.
搜索隐藏文件(点文件)。默认情况下,隐藏文件会被忽略,就像大多数 Unix 实用程序一样。--sort
指定按路径名排序的输出,首先显示排序的匹配文件,然后显示子目录中排序的递归匹配项。否则,将不按特定顺序报告匹配文件以提高性能;-Dread
和-dread
是 GNU/BSD grep 默认值,但不推荐,请参阅改进以获取解释。?返回目录
添加到.bashrc
以提高工作效率的常用别名:
alias uq = 'ug -Q' # interactive TUI search (uses .ugrep config)
alias uz = 'ug -z' # compressed files and archives search (uses .ugrep config)
alias ux = 'ug -U --hexdump' # binary pattern search (uses .ugrep config)
alias ugit = 'ug -R --ignore-files' # works like git-grep & define your preferences in .ugrep config
alias grep = 'ug -G' # search with basic regular expressions (BRE) like grep
alias egrep = 'ug -E' # search with extended regular expressions (ERE) like egrep
alias fgrep = 'ug -F' # find string(s) like fgrep
alias zgrep = 'ug -zG' # search compressed files and archives with BRE
alias zegrep = 'ug -zE' # search compressed files and archives with ERE
alias zfgrep = 'ug -zF' # find string(s) in compressed files and/or archives
alias xdump = 'ugrep -X ""' # hexdump files without searching (don't use .ugrep config)
alias zmore = 'ugrep+ -z -I -+ --pager ""' # view compressed, archived and regular files (don't use .ugrep config)
?返回目录
-Q
启动交互式查询 TUI。n
时, ugrep会跨多行匹配模式。-U
禁用)。--bool
)。--ignore-files
支持 gitignore 。-Z
进行模糊(近似)匹配。-z
搜索压缩文件和档案。-z
搜索 cpio、jar、pax、tar、zip 和 7z 档案。-z
和--zmax=NUM
方式递归存储在档案中,深度可达NUM
层。--filter
搜索 pdf、doc、docx、xls、xlsx、epub 等。-r
递归搜索目录。-.
启用)。-E
作为egrep,而-G
启用 BRE)。-J1
禁用)。-W
(以十六进制输出二进制匹配,并像往常一样输出文本匹配)和-X
(以十六进制输出所有匹配)生成十六进制转储。--format
)。-f
使用GREP_PATH
环境变量或/usr/local/share/ugrep/patterns
中安装的预定义模式。如果指定了-f
并指定了一个或多个-e
模式,则选项-F
、 -x
和-w
不适用于-f
模式。这是为了避免当-f
与可能无法再与这些选项一起正常工作的预定义模式一起使用时产生混淆。-O
、 -M
和-t
分别指定文件扩展名、文件签名魔术字节模式和预定义文件类型。这允许在目录树中搜索某些类型的文件,例如使用递归搜索选项-R
和-r
。选项-O
、 -M
和-t
也适用于 cpio、jar、pax、tar、zip 和 7z 文件中的存档文件。-k
, --column-number
显示列号,通过扩展制表符考虑制表符间距,如选项--tabs
指定。-P
(Perl 正则表达式)支持反向引用(使用--format
)和lookbehinds,它使用 PCRE2 或 Boost.Regex 库通过类似 PCRE 的语法进行快速 Perl 正则表达式匹配。-b
与选项-o
或选项-u
一起使用,ugrep 显示模式匹配的确切字节偏移量,而不是 GNU/BSD grep 报告的匹配行开头的字节偏移量。-u
, --ungroup
不将每行的多个匹配项分组。此选项会针对行上的每个附加模式匹配再次显示匹配的输入行。此选项与选项-c
一起特别有用,可以报告每个文件的模式匹配总数,而不是每个文件匹配的行数。-Y
允许匹配空模式。使用空匹配模式进行 grep 很奇怪,并且使用 GNU grep 与 BSD grep 会给出不同的结果。默认情况下, ugrep不输出空匹配,这避免了可能产生“随机”结果的错误。例如,使用 GNU/BSD grep,模式a*
匹配输入中的每一行,并且实际上匹配xyz
三次( x
、 y
和z
之前和之间的空转换)。允许空匹配需要ugrep选项-Y
。以^
开头或以$
结尾的模式(例如^h*$
匹配空。这些模式自动启用选项-Y
。-D, --devices=ACTION
默认情况下是skip
,而不是read
。这可以防止意外挂在递归搜索的目录中的命名管道上,就像默认情况下read
设备的 GNU/BSD grep 可能发生的情况一样。-d, --directories=ACTION
默认情况下是skip
,而不是read
。默认情况下,会搜索命令行上指定的目录,但不会递归地深入子目录。-N PATTERN
,它们是(?^X)
形式的模式,跳过所有X
输入,从而从搜索中删除X
例如,在源代码中搜索标识符时,可以使用否定模式跳过字符串和注释,并查找不在字符串和注释中的匹配项。预定义的zap
模式使用负模式,例如,使用-f cpp/zap_comments
忽略 C++ 注释中的模式匹配。GREP_OPTIONS
环境变量,因为ugrep的行为必须在每个系统上都是可移植和可预测的。由于这个原因,GNU grep 也放弃了GREP_OPTIONS
。请使用ug
命令加载位于工作目录或主目录(如果存在)中的 .ugrep 配置文件,或使用 shell 别名创建具有特定搜索选项的新命令。?返回目录
要使用放置在工作目录或主目录中的配置文件.ugrep
执行搜索(请注意ug
与ugrep --config
相同):
ug PATTERN FILE...
要将.ugrep
配置文件保存到工作目录,然后在主目录中编辑此文件以自定义ug
默认值的首选项:
ug --save-config
要搜索工作目录并递归地更深地查找main
(请注意,如果未指定文件参数,则默认启用-r
递归符号链接):
ug main
相同,但仅递归搜索 C++ 源代码文件,忽略所有其他文件:
ug -tc++ main
同样,使用交互式查询 TUI,从初始搜索模式main
开始(请注意,带有初始模式的-Q
需要选项-e
因为模式通常是交互式指定的,并且所有命令行参数都被视为文件/目录):
ug -Q -tc++ -e main
要在 C++ 文件中使用正则表达式模式搜索#define
(和# define
等)(请注意,应引用模式以防止 shell 通配*
和?
):
ug -tc++ '#[t ]*define'
要在目录myproject
中递归搜索main
作为单词 ( -w
),而不遵循符号链接 ( -r
),在匹配的行旁边显示匹配的行号 ( -n
) 和列号 ( -k
):
ug -r -nkw main myproject
相同,但仅搜索myproject
而不进行更深层次的递归(请注意,默认情况下在一级搜索目录参数):
ug -nkw main myproject
相同,但使用-2
搜索myproject
和更深一级的子目录(两级):
ug -2 -nkw main myproject
相同,但仅使用-tc++
搜索myproject
及其子目录中的 C++ 文件:
ug -tc++ -2 -nkw main myproject
相同,但还可以使用-z
搜索存档(例如 zip 和 tar 文件)和压缩文件:
ug -z -tc++ -2 -nkw main myproject
在工作目录中递归搜索main
,同时忽略 gitignored 文件(例如,假设.gitignore
位于工作目录或以下目录中):
ug --ignore-files -tc++ -nkw main
列出工作目录及更深层次中未被.gitignore
文件忽略的所有文件:
ug --ignore-files -l ''
显示与-t
参数对应的搜索到的文件扩展名和“魔法字节”(shebangs) 的列表:
ug -tlist
要根据扩展名和带-l
的 shebang 递归列出所有 shell 文件(请注意''
匹配任何非空文件):
ug -l -tShell ''
?返回目录
要在源代码中搜索main
同时忽略字符串和注释块,您可以使用带有选项-N
否定模式来跳过 C/C++ 引用的字符串和注释块中不需要的匹配:
ug -r -nkw -e 'main' -N '"(\.|\r?n|[^\n"])*"|//.*|/*(.*n)*?.**+/' myproject
正确输入需要大量工作!如果您像我一样,当我正在处理更重要的事情时,我不想花时间摆弄正则表达式模式。有一种更简单的方法,可以使用随ugrep
工具安装的ugrep预定义模式 ( -f
):
ug -r -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
此查询还会搜索 C/C++ 源代码之外的其他文件,例如 README、Makefile 等。我们还使用-r
跳过符号链接。因此,让我们通过仅使用选项-tc,c++
选择C/C ++文件来完善此查询,并使用-R
:符合文件和目录的符号链接:
ug -R -tc,c++ -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
如果您只想查找标识符main
而不是作为函数main(
?在这种情况下,使用负面模式来跳过不需要的mainh*(
模式匹配:
ug -R -tc,c++ -nkw -e 'main' -N 'mainh*(' -f c/zap_strings -f c/zap_comments myproject
这使用-e
和-N
选项分别明确指定模式和h
负模式,该模式本质上是形成模式main|(?^mainh*()
,负模式对于过滤我们不感兴趣的模式匹配非常有用。
作为另一个例子,假设我们可能需要在C/C ++注释块中搜索FIXME
。为此,我们可以首先使用UGREP的预定义c/comments
模式选择评论块,然后使用管道使用FIXME
选择行:
ug -R -tc,c++ -nk -f c/comments myproject | ug -w 'FIXME'
通常,使用管道过滤结果比使用某些搜索工具使用的和逻辑更容易。这种方法遵循Unix Spirit,使公用事业简单,并将其结合起来进行更复杂的任务。
让我们制作出在跳过字符串和评论时在Java源代码中找到的所有标识符的分类列表:
ug -R -tjava -f java/names myproject | sort -u
这匹配Java Unicode标识符使用REGEX p{JavaIdentifierStart}p{JavaIdentifierPart}*
在patterns/java/names
中定义。
借助传统的GREP和类似GREP的工具,它需要付出巨大的努力才能递归搜索定义函数qsort
的C/C ++源文件,需要类似的内容:
ug -R --include='*.c' --include='*.cpp' '^([ t]*[[:word:]:*&]+)+[ t]+qsort[ t]*([^;n]+$' myproject
幸运的是,使用ugrep,我们可以通过使用选项-Oc,cpp
和使用使用该工具安装的预定义模式functions
来选择具有扩展.c
或.cpp
的文件中的所有功能定义,以生成所有功能定义。然后我们选择我们想要的一个:
ug -R -Oc,cpp -nk -f c/functions | ug 'qsort'
请注意,我们可以使用-tc,c++
选择C/C ++文件,但是当我们只想搜索.c
和.cpp
文件时,这也包括标头文件。
我们还可以从.gitignore
中定义的搜索中跳过文件和目录。为此,我们使用--ignore-files
在找到一个或多个.gitignore
文件时,将与.gitignore
匹配的递归搜索中排除任何文件和目录:
ug -R -tc++ --ignore-files -f c++/defines
这将在工作目录中搜索#define
行( -f c++/defines
)的C ++文件( -tc++
),而在.gitignore
中跳过文件和目录时。如果您发现此键太长而无法键入,则定义一个别名以搜索GitHub目录:
alias ugit='ugrep -R --ignore-files'
ugit -tc++ -f c++/defines
要突出显示匹配时,当我们使用的一系列管道推动时,我们应该使用--color=always
:
ugit --color=always -tc++ -f c++/defines | ugrep -w 'FOO.*'
这返回了所有#define FOO...
c/c ++源代码文件中的宏,跳过.gitignore
中定义的文件。
请注意, --exclude
的补充不是--include
,因为排除始终优先于包含物,因此我们无法可靠地列出被--include-from='.gitignore'
文件。仅访问使用--include
和Directories明确指定的文件,并访问了--include-dir
。列表中--include-from
列表,这些列表分别被视为要添加到--include
和--include-dir
的文件和目录。这意味着,当该文件中未明确列出目录名称和目录路径时,则不会使用--include-from
访问它。
由于UGREP检查输入是否有效UTF编码的Unicode(除非使用-U
),因此可以将其用作滤波器来忽略程序产生的非UTF输出:
program | ugrep -I ''
如果程序产生有效的输出,则输出将通过,否则输出被过滤输出选项-I
。如果输出最初对非常大的部分有效,但随后是无效的输出,则UGREP最初可能会显示输出到达,但不包括无效的输出,此后进一步的输出被阻止。
要过滤有效的ASCII或UTF编码的线,同时删除没有:
program | ugrep '[p{Unicode}--[n]]+'
请注意, p{Unicode}
匹配n
但我们不想匹配整个文件!只需与[p{Unicode}--[n]]+
行。
?返回目录
Ugrep Man页面:
man ugrep
显示一个帮助页:
ug --help
显示出提及WHAT
的选项:
ug --help WHAT
要显示-t TYPES
的列表选项值:
ug -tlist
在交互式查询TUI中,按F1或CTRL-Z以获取帮助和选项:
ug -Q
?返回目录
--config[=FILE], ---[FILE]
Use configuration FILE. The default FILE is `.ugrep'. The working
directory is checked first for FILE, then the home directory. The
options specified in the configuration FILE are parsed first,
followed by the remaining options specified on the command line.
The ug command automatically loads a `.ugrep' configuration file,
unless --config=FILE or --no-config is specified.
--no-config
Do not load the default .ugrep configuration file.
--save-config[=FILE] [OPTIONS]
Save configuration FILE to include OPTIONS. Update FILE when
first loaded with --config=FILE. The default FILE is `.ugrep',
which is automatically loaded by the ug command. When FILE is a
`-', writes the configuration to standard output. Only part of the
OPTIONS are saved that do not cause searches to fail when combined
with other options. Additional options may be specified by editing
the saved configuration file. A configuration file may be modified
manually to specify one or more config[=FILE] to indirectly load
the specified FILEs, but recursive config loading is not allowed.
ug
命令旨在用于上下文依赖性交互式搜索,并且等同于ugrep --config
命令,以加载配置文件.ugrep
ug PATTERN ...
ugrep --config PATTERN ...
ug
命令还按名称按名称搜索的文件对文件进行分类。配置文件包含NAME=VALUE
对,其中NAME
是长选项的名称(无--
)和=VALUE
是一个参数,该参数是可选的,可以根据选项省略。以#
开头的空线条和线条被忽略:
# Color scheme
colors=cx=hb:ms=hiy:mc=hic:fn=hi+y+K:ln=hg:cn=hg:bn=hg:se=
# Disable searching hidden files and directories
no-hidden
# ignore files specified in .ignore and .gitignore in recursive searches
ignore-files=.ignore
ignore-files=.gitignore
命令行选项按以下顺序解析:首先,加载了(默认或命名)配置文件,然后解析命令行上的剩余选项和参数。
选项--stats
显示搜索后使用的配置文件。
命名的配置文件旨在通过将命令行选项的数量减少到一个---FILE
来使用FILE
中指定的选项集合来简化自定义搜索任务。 --config=FILE
选项及其缩写表格---FILE
加载位于工作目录中的指定配置文件,或者找不到时,位于主目录中:
ug ---FILE PATTERN ...
ugrep ---FILE PATTERN ...
当找不到FILE
或无法读取文件时会产生错误。
命名的配置文件可用于定义项目开发工作流程中任务要求的选项集合。例如,通过检查源代码和文档以使用FixMe和ToDo项目来报告未解决的问题。该命名的配置文件可以通过将其放置在项目目录中来定位于项目,也可以通过将其放置在主目录中进行全局。对于视觉反馈,可以在配置FILE
中使用选项colors
指定特定于本任务的配色方案,以帮助识别由命名配置而不是默认配置所产生的输出。
--save-config
选项使用带有--config
的当前配置将.ugrep
配置文件保存到工作目录中。当当前的配置与其他选项时,也可以保存当前的配置。只有那些无法与其他无法对搜索结果负面影响的选项冲突的选项将被保存。
--save-config=FILE
选项将配置保存到指定FILE
。当FILE
为-
时,配置将写入标准输出。
另外,可以手动创建或修改配置文件。配置文件可以包括一个或多个config[=FILE]
以间接加载规格的FILE
,但是禁止递归配置加载。制造创建配置文件的最简单方法是指定文件顶部的config
,然后是覆盖默认值的长选项。
?返回目录
-Q[=DELAY], --query[=DELAY]
Query mode: start a TUI to perform interactive searches. This mode
requires an ANSI capable terminal. An optional DELAY argument may
be specified to reduce or increase the response time to execute
searches after the last key press, in increments of 100ms, where
the default is 3 (300ms delay). No whitespace may be given between
-Q and its argument DELAY. Initial patterns may be specified with
-e PATTERN, i.e. a PATTERN argument requires option -e. Press F1
or CTRL-Z to view the help screen. Press F2 or CTRL-Y to invoke a
command to view or edit the file shown at the top of the screen.
The command can be specified with option --view, or defaults to
environment variable PAGER when defined, or EDITOR. Press Tab and
Shift-Tab to navigate directories and to select a file to search.
Press Enter to select lines to output. Press ALT-l for option -l
to list files, ALT-n for -n, etc. Non-option commands include
ALT-] to increase context. See also options --no-confirm, --delay,
--split and --view.
--no-confirm
Do not confirm actions in -Q query TUI. The default is confirm.
--delay=DELAY
Set the default -Q key response delay. Default is 3 for 300ms.
--split
Split the -Q query TUI screen on startup.
--view[=COMMAND]
Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y.
此选项启动了一个用户界面以交互式输入搜索模式:
-c
计算匹配。按下Alt -C再次禁用-c
。在搜索时或查看帮助屏幕时,可以使用ALT键切换选项。如果不支持ALT/META键(例如X11 XTERM),则按CTRL-O,然后按与该选项相对应的键。-g
文件和目录匹配的Globs,这是Gitignore风格的GLOB模式的逗号分隔列表。按下ESC返回控制到查询模式提示(保存了地球)。当地球之前是一个!
或a ^
,跳过该文件匹配a /
a / pathnames时的名称匹配地球的文件。否则,Basename是匹配的。当一个地球以A /
结束时,目录会匹配。Q>
(正常), F>
(固定字符串), G>
(基本正则是), P>
(PERL匹配)和Z>
(模糊匹配)之间切换。显示--glob=
提示时,可以输入gitignore式球形图案的逗号分隔列表。按下ESC将控制权返回到模式提示。--view
指定的Pager的文件。--view=COMMAND
指定文件查看器或编辑器。否则,使用PAGER
或EDITOR
环境变量将使用CTRL-Y调用命令。必须在输出中启用和可见文件名才能使用此功能。--color
选项。DELAY
值,例如1。但是,由于每次按下的键反复启动和取消搜索,较低的值可能会增加系统负载。--heading
。按Alt-+关闭标题。查询TUI键映射:
键 | 功能 |
---|---|
Alt-key | 切换与key 相对应的ugrep命令行选项 |
Alt-/ xxxx / | 插入UNICODE六角形代码u+xxxx |
Esc Ctrl-C | 回去或退出 |
Ctrl-Q | 快速退出并输出选择模式下选择的结果 |
Tab | CHDIR到屏幕顶部显示的文件目录或选择文件的目录 |
Shift-Tab | CHDIR一个级别或取消选择文件 |
Enter | 输入选择模式并切换选定的行以输出出口 |
Up Ctrl-P | 向上移动 |
Down Ctrl-N | 向下移动 |
Left Ctrl-B | 向左移动 |
Right Ctrl-F | 向右移动 |
PgUp Ctrl-G | 通过页面移动显示 |
PgDn Ctrl-D | 通过页面向下移动显示 |
Alt-Up | 通过1/2页移动显示(MacOS Shift-Up ) |
Alt-Down | 通过1/2页向下移动显示(MacOS Shift-Down ) |
Alt-Left | 移动显示为1/2页(MacOS Shift-Left ) |
Alt-Right | 向右移动显示乘1/2页(MacOS Shift-Right ) |
Home Ctrl-A | 将光标移至线路的开头 |
End Ctrl-E | 将光标移至线路的末端 |
Ctrl-K | 在光标之后删除 |
Ctrl-L | 刷新屏幕 |
Ctrl-O + key | 切换与key 相对应的ugrep命令行选项,与Alt-key 相同 |
Ctrl-R F4 | 跳到书签 |
Ctrl-S | 跳到下一个dir/file/context |
Ctrl-T F5 | 切换拆分屏幕( --split 启动拆分屏幕TUI) |
Ctrl-U | 在光标之前删除 |
Ctrl-V | 逐字感 |
Ctrl-W | 跳回一个dir/file/context |
Ctrl-X F3 | 设置书签 |
Ctrl-Y F2 | 查看或编辑屏幕顶部显示的文件 |
Ctrl-Z F1 | 查看帮助和选项 |
Ctrl-^ | Chdir回到启动工作目录 |
Ctrl-] | 切换颜色/单声道 |
Ctrl- | 终止过程 |
在工作目录和以下互动搜索文件:
ug -Q
相同,但仅限于C ++文件,而忽略.gitignore
文件:
ug -Q -tc++ --ignore-files
在工作目录和以下互动搜索所有makefiles:
ug -Q -g 'Makefile*' -g 'makefile*'
相同,但最多2个目录级别(工作和一个子目录级别):
ug -Q -2 -g 'Makefile*' -g 'makefile*'
为了交互式查看main.cpp
的内容并搜索它,其中-y
将任何不匹配的行显示为上下文:
ug -Q -y main.cpp
要进行交互式搜索main.cpp
,从搜索模式TODO
开始,并具有5行的匹配上下文(可以交互启用和禁用上下文,这也覆盖了2行的默认上下文大小):
ug -Q -C5 -e TODO main.cpp
查看和搜索存档的内容(例如zip,tarball):
ug -Q -z archive.tar.gz
要使用ugrep查询选择unzip
进行交互式从project.zip
中选择文件。
unzip project.zip `zipinfo -1 project.zip | ugrep -Q`
?返回目录
-L, --files-without-match
Only the names of files not containing selected lines are written
to standard output. Pathnames are listed once per file searched.
If the standard input is searched, the string ``(standard input)''
is written.
-l, --files-with-matches
Only the names of files containing selected lines are written to
standard output. ugrep will only search a file until a match has
been found, making searches potentially less expensive. Pathnames
are listed once per file searched. If the standard input is
searched, the string ``(standard input)'' is written.
-R, --dereference-recursive
Recursively read all files under each directory. Follow all
symbolic links to files and directories, unlike -r.
-r, --recursive
Recursively read all files under each directory, following symbolic
links only if they are on the command line. Note that when no FILE
arguments are specified and input is read from a terminal,
recursive searches are performed as if -r is specified.
-S, --dereference-files
When -r is specified, symbolic links to files are followed, but not
to directories. The default is not to follow symbolic links.
--depth=[MIN,][MAX], -1, -2, -3, ... -9, -10, -11, -12, ...
Restrict recursive searches from MIN to MAX directory levels deep,
where -1 (--depth=1) searches the specified path without recursing
into subdirectories. Note that -3 -5, -3-5, and -35 search 3 to 5
levels deep. Enables -r if -R or -r is not specified.
-g GLOBS, --glob=GLOBS
Search only files whose name matches the specified comma-separated
list of GLOBS, same as --include='glob' for each `glob' in GLOBS.
When a `glob' is preceded by a `!' or a `^', skip files whose name
matches `glob', same as --exclude='glob'. When `glob' contains a
`/', full pathnames are matched. Otherwise basenames are matched.
When `glob' ends with a `/', directories are matched, same as
--include-dir='glob' and --exclude-dir='glob'. A leading `/'
matches the working directory. This option may be repeated and may
be combined with options -M, -O and -t to expand searches. See
`ugrep --help globs' and `man ugrep' section GLOBBING for details.
-O EXTENSIONS, --file-extension=EXTENSIONS
Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When `ext' is preceded by a `!' or a
`^', skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive search.
-t TYPES, --file-type=TYPES
Search only files associated with TYPES, a comma-separated list of
file types. Each file type corresponds to a set of filename
extensions passed to option -O and filenames passed to option -g.
For capitalized file types, the search is expanded to include files
with matching file signature magic bytes, as if passed to option
-M. When a type is preceded by a `!' or a `^', excludes files of
the specified type. This option may be repeated.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
如果未指定文件参数并从终端读取输入,则将递归搜索执行,就像指定-r
一样。要强制从标准输入中读取,请指定-
作为文件参数。
递归列出工作目录中的所有非空文件:
ug -r -l ''
在工作目录中列出所有非空文件,但不更深入(在这种情况下给出文件参数.
对于工作目录):
ug -l '' .
在目录mydir
中列出所有非空文件,但不会更深入(因为给出了文件参数):
ug -l '' mydir
在遵循符号链接时,在mydir
中列出所有非空文件,并更深入:
ug -R -l '' mydir
要递归在指定的路径上列出所有非空文件,同时仅访问子目录,即在一个级别上访问mydir/
和子目录的目录更深的mydir/*/
(请注意,可以将-2 -l
缩写为-l2
):
ug -2 -l '' mydir
递归列出目录mydir
中的所有非空文件,而不是遵循任何符号链接(在命令行(例如mydir
)上除外):
ug -rl '' mydir
递归列出所有与文本CPP
匹配的makefiles:
ug -l -tmake 'CPP'
递归列出所有Makefile.*
匹配bin_PROGRAMS
:
ug -l -g'Makefile.*' 'bin_PROGRAMS'
递归列出所有具有扩展名.sh的非空文件,以-Osh
:
ug -l -Osh ''
递归地列出所有基于扩展名和shebangs的shell脚本,以-tShell
:
ug -l -tShell ''
递归仅根据-tshell
的扩展名列出所有shell脚本:
ug -l -tshell ''
?返回目录
--bool, -%, -%%
Specifies Boolean query patterns. A Boolean query pattern is
composed of `AND', `OR', `NOT' operators and grouping with `(' `)'.
Spacing between subpatterns is the same as `AND', `|' is the same
as `OR' and a `-' is the same as `NOT'. The `OR' operator binds
more tightly than `AND'. For example, --bool 'A|B C|D' matches
lines with (`A' or `B') and (`C' or `D'), --bool 'A -B' matches
lines with `A' and not `B'. Operators `AND', `OR', `NOT' require
proper spacing. For example, --bool 'A OR B AND C OR D' matches
lines with (`A' or `B') and (`C' or `D'), --bool 'A AND NOT B'
matches lines with `A' without `B'. Quoted subpatterns are matched
literally as strings. For example, --bool 'A "AND"|"OR"' matches
lines with `A' and also either `AND' or `OR'. Parentheses are used
for grouping. For example, --bool '(A B)|C' matches lines with `A'
and `B', or lines with `C'. Note that all subpatterns in a Boolean
query pattern are regular expressions, unless -F is specified.
Options -E, -F, -G, -P and -Z can be combined with --bool to match
subpatterns as strings or regular expressions (-E is the default.)
This option does not apply to -f FILE patterns. The double short
option -%% enables options --bool --files. Option --stats displays
the Boolean search patterns applied. See also options --and,
--andnot, --not, --files and --lines.
--files
Boolean file matching mode, the opposite of --lines. When combined
with option --bool, matches a file if all Boolean conditions are
satisfied. For example, --bool --files 'A B|C -D' matches a file
if some lines match `A', and some lines match either `B' or `C',
and no line matches `D'. See also options --and, --andnot, --not,
--bool and --lines. The double short option -%% enables options
--bool --files.
--lines
Boolean line matching mode for option --bool, the default mode.
--and [[-e] PATTERN] ... -e PATTERN
Specify additional patterns to match. Patterns must be specified
with -e. Each -e PATTERN following this option is considered an
alternative pattern to match, i.e. each -e is interpreted as an OR
pattern. For example, -e A -e B --and -e C -e D matches lines with
(`A' or `B') and (`C' or `D'). Note that multiple -e PATTERN are
alternations that bind more tightly together than --and. Option
--stats displays the search patterns applied. See also options
--not, --andnot, and --bool.
--andnot [[-e] PATTERN] ...
Combines --and --not. See also options --and, --not, and --bool.
--not [-e] PATTERN
Specifies that PATTERN should not match. Note that -e A --not -e B
matches lines with `A' or lines without a `B'. To match lines with
`A' that have no `B', specify -e A --andnot -e B. Option --stats
displays the search patterns applied. See also options --and,
--andnot, and --bool.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
请注意, --and
--not
和 - --andnot
选项都需要-e PATTERN
。
-%
选项使所有基于布尔值的模式都支持以下从最高级别到最低级别列出的逻辑操作:
操作员 | 选择 | 结果 |
---|---|---|
"x" | 从字面上且完全按照指定的方式匹配x (使用标准正则逃脱Q 和E ) | |
( ) | 布尔表达分组 | |
-x | NOT x | 倒匹配,IE匹配如果x 不匹配 |
x|y | x OR y | 与x 或y 匹配线条 |
xy | x AND y | 将线与x 和y 匹配 |
x
和y
是不以特殊符号开头的子图案|
, -
和(
(使用引号或 evase匹配这些);
-
并且NOT
相同的,并且优先考虑OR
这意味着-x|y
== (-x)|y
。
|
OR
是相同的,并优先考虑AND
这意味着xy|z
== x (y|z)
搜索完成后, --stats
选项以人类可读形式显示了布尔值查询(连接正常形式)。要在不搜索的情况下显示CNF,请从EOF终止的标准输入中阅读,例如echo | ugrep -% '...' --stats
。
除了NOT
的颜色( NOT
subpattern)使用x|-y
)时,subpatern在输出中是颜色高的。请注意,子图案可能重叠。在那种情况下,只有第一个匹配的子图案是颜色的。
当子图案匹配新线时,可以匹配多行。但是,有一个例外:以(?=X)
lookaheads结尾的子图案在X
跨越多行时可能无法匹配。
空图案与任何线路(GREP标准)匹配。因此, -% 'x|""|y'
与所有内容匹配, x
和y
没有颜色高。选项-y
应该用于将每一行作为上下文显示,例如-y 'x|y'
。
类似FZF的交互式查询(带有模糊匹配的固定字符串的布尔搜索,以允许多达4个额外的字符与-Z+4
in -w with -w
),按tab和alt -y,以查看具有匹配项的文件。按Shift-Tab和Alt-L,返回到匹配文件列表:
ug -Q -%% -l -w -F -Z+4 --sort=best
递归地找到所有包含hot
和dog
文件,并带有选项--files
:
ug -%% 'hot dog'
ug --files -e hot --and dog
在myfile.txt
中找到包含hot
和dog
的线:
ug -% 'hot dog' myfile.txt
ug -e hot --and dog myfile.txt
在myfile.txt中查找包含place
的线,然后在myfile.txt
中找到hotdog
或taco
(或两者):
ug -% 'hotdog|taco place' myfile.txt
ug -e hotdog -e taco --and place myfile.txt
相同,但排除匹配diner
线条:
ug -% 'hotdog|taco place -diner' myfile.txt
ug -e hotdog -e taco --and place --andnot diner myfile.txt
找到与fast
和food
相匹配但在myfile.txt
中bad
diner
或线条的线条:
ug -% 'diner|(fast food -bad)' myfile.txt
在myfile.txt
中找到带有fast food
的线(准确)或与diner
old
线条bad
ug -% '"fast food"|diner -bad -old' myfile.txt
相同,但使用具有相同含义的不同布尔表达:
ug -% '"fast food"|diner -(bad|old)' myfile.txt
找到diner
的线条good
在myfile.txt
中(也就是说,在没有diner
情况下显示出good
的线条,并与diner
一起展示线条,但只有逻辑上暗示good
人!):):
ug -% 'good|-diner' myfile.txt
ug -e good --not diner myfile.txt
在myfile.txt
中找到使用foo
and -bar
和"baz"
的行(不是-
和"
应该使用 eScapes,以及
--and -e -bar
):
ug -% 'foo -bar "baz"' myfile.txt
ug -e foo --and -e -bar --and '"baz"' myfile.txt
搜索myfile.cpp
查找使用TODO
或FIXME
的行,但并非在同一条线上,例如XOR:
ug -% 'TODO|FIXME -(TODO FIXME)' myfile.cpp
ug -e TODO -e FIXME --and --not TODO --not FIXME myfile.cpp
?返回目录
-e PATTERN, --regexp=PATTERN
Specify a PATTERN to search the input. An input line is selected
if it matches any of the specified patterns. This option is useful
when multiple -e options are used to specify multiple patterns, or
when a pattern begins with a dash (`-'), or to specify a pattern
after option -f or after the FILE arguments.
-f FILE, --file=FILE
Read newline-separated patterns from FILE. White space in patterns
is significant. Empty lines in FILE are ignored. If FILE does not
exist, the GREP_PATH environment variable is used as path to FILE.
If that fails, looks for FILE in /usr/local/share/ugrep/pattern.
When FILE is a `-', standard input is read. This option may be
repeated.
-L, --files-without-match
Only the names of files not containing selected lines are written
to standard output. Pathnames are listed once per file searched.
If the standard input is searched, the string ``(standard input)''
is written.
-N PATTERN, --neg-regexp=PATTERN
Specify a negative PATTERN to reject specific -e PATTERN matches
with a counter pattern. Note that longer patterns take precedence
over shorter patterns, i.e. a negative pattern must be of the same
length or longer to reject matching patterns. Option -N cannot be
specified with -P. This option may be repeated.
-v, --invert-match
Selected lines are those not matching any of the specified
patterns.
-w, --word-regexp
The PATTERN is searched for as a word, such that the matching text
is preceded by a non-word character and is followed by a non-word
character. Word-like characters are Unicode letters, digits and
connector punctuations such as underscore.
-x, --line-regexp
Select only those matches that exactly match the whole line, as if
the patterns are surrounded by ^ and $.
另请参见与传统的GNU/BSD GREP选项相比,请参见带有 -%, -%%%, - 和, - 不使用 -%, - %%, - 和, - - 不。
在文件myfile.sh
中显示行,但不匹配^[ t]*#
:
ug -v '^[ t]*#' myfile.sh
搜索myfile.cpp
以使用FIXME
且urgent
线条,但不是Scotty
:
ugrep FIXME myfile.cpp | ugrep urgent | ugrep -v Scotty
相同,但使用-%
用于布尔查询:
ug -% 'FIXME urgent -Scotty' myfile.cpp
使用模式d+
搜索小数 D 0
使用负模式0d+
并排除555
:
ug -e 'd+' -N '0d+' -N 555 myfile.cpp
通过使用“负模式” -n' -N
-N '/<display>'
在不匹配myfile.py
display
搜索以disp
开头的单词。
ug -e '<disp' -N '<display>' myfile.py
要在文件myfile.py
中搜索带有字符串和注释中的单词中的单词display
行,其中-f
在这种情况下指定了文件中的模式,在这种情况下为预定义的模式:
ug -n -w 'display' -f python/zap_strings -f python/zap_comments myfile.py
显示不是空白行的行:
ug -x -e '.*' -N 'h*' myfile.py
相同,但使用-v
和-x
与h*
,ie模式^h*$
:
ug -v -x 'h*' myfile.py
递归列出所有不包含单词display
单词的Python文件,以便在字符串和评论中出现该单词:
ug -RL -tPython -w 'display' -f python/zap_strings -f python/zap_comments
?返回目录
--encoding=ENCODING
The encoding format of the input. The default ENCODING is binary
and UTF-8 which are the same. Note that option -U specifies binary
PATTERN matching (text matching is the default.)
二进制,ASCII和UTF-8文件不需要此选项搜索它们。同样,假设UTF-16和UTF-32文件像往常一样以UTF-16和UTF-32文件开头,则UTF-16和UTF-32文件不需要此选项来搜索它们。其他文件编码需要选项--encoding=ENCODING
:
编码 | 范围 |
---|---|
ASCII | 不适用 |
UTF-8 | 不适用 |
UTF-16与Bom | 不适用 |
UTF-32与Bom | 不适用 |
UTF-16是bom | UTF-16 或UTF-16BE |
utf-16 le w/o bom | UTF-16LE |
UTF-32 W/O BOM | UTF-32 或UTF-32BE |
UTF-32 W/O BOM | UTF-32LE |
拉丁语1 | LATIN1 或ISO-8859-1 |
ISO-8859-1 | ISO-8859-1 |
ISO-8859-2 | ISO-8859-2 |
ISO-8859-3 | ISO-8859-3 |
ISO-8859-4 | ISO-8859-4 |
ISO-8859-5 | ISO-8859-5 |
ISO-8859-6 | ISO-8859-6 |
ISO-8859-7 | ISO-8859-7 |
ISO-8859-8 | ISO-8859-8 |
ISO-8859-9 | ISO-8859-9 |
ISO-8859-10 | ISO-8859-10 |
ISO-8859-11 | ISO-8859-11 |
ISO-8859-13 | ISO-8859-13 |
ISO-8859-14 | ISO-8859-14 |
ISO-8859-15 | ISO-8859-15 |
ISO-8859-16 | ISO-8859-16 |
Mac(CR = Newline) | MAC |
Macroman(CR = Newline) | MACROMAN |
EBCDIC | EBCDIC |
DOS代码页437 | CP437 |
DOS代码第850页 | CP850 |
DOS代码页858 | CP858 |
Windows Code Page 1250 | CP1250 |
Windows Code Page 1251 | CP1251 |
Windows Code Page 1252 | CP1252 |
Windows Code Page 1253 | CP1253 |
Windows Code Page 1254 | CP1254 |
Windows Code Page 1255 | CP1255 |
Windows Code Page 1256 | CP1256 |
Windows Code Page 1257 | CP1257 |
Windows Code Page 1258 | CP1258 |
KOI8-R | KOI8-R |
KOI8-U | KOI8-U |
koi8-ru | KOI8-RU |
请注意,REGEX模式始终在UTF-8中指定(包括ASCII)。要搜索具有二进制模式的二进制文件,请参阅使用-U,-W和-X的搜索和显示二进制文件。
递归列出ASCII(即7位)的所有文件:
ug -L '[^[:ascii:]]'
递归列出所有非ASCII的文件,即UTF-8,UTF-16和UTF-32文件,具有非ASCII UNICODE字符(U+0080及以上):
ug -l '[^[:ascii:]]'
检查文件是否包含非ASCII UNICODE(U+0080及以上):
ug -q '[^[:ascii:]]' myfile && echo "contains Unicode"
要从文件中删除无效-o
Unicode字符(请注意,由于检测和拒绝二进制数据并添加了二进制数据,因此不起作用,但添加了新线,但是--format="%o%
不检查二进制文件并将匹配项复制为“ IS” ):
ug "[p{Unicode}n]" --format="%o" badfile.txt
递归列出具有无效的UTF内容的文件(即无效的UTF-8字节序列或包含任何UTF-8/16/32代码点的文件,这些代码点超出有效的Unicode范围),通过与任何代码点匹配.
通过使用负模式-N 'p{Unicode}'
忽略每个有效的Unicode字符:
ug -l -e '.' -N 'p{Unicode}'
显示包含笑脸表情符号的线:
ug '[?-?]' emojis.txt
使用x{hhhh}
获得相同的结果,以选择一个Unicode字符范围:
ug '[x{1F600}-x{1F60F}]' emojis.txt
显示包含名称Gödel(或Goedel),Escher或Bach的行:
ug 'G(ö|oe)del|Escher|Bach' GEB.txt wiki.txt
在UTF-16文件中以UTF-16 BOM标记的UTF-16文件中的下层或高层搜索lorem
:
ug -iw 'lorem' utf16lorem.txt
搜索utf16lorem.txt当此文件没有utf-16 bom时,使用--encoding
:
ug --encoding=UTF-16 -iw 'lorem' utf16lorem.txt
要搜索在ISO-8859-1中编码的spanish-iso.txt
:
ug --encoding=ISO-8859-1 -w 'año' spanish-iso.txt
?返回目录
-o, --only-matching
Output only the matching part of lines. If -A, -B or -C is
specified, fits the match and its context on a line within the
specified number of columns.
多行可以与匹配newline字符的模式相匹配。使用选项-o
仅输出匹配,而不是匹配的完整行。
要匹配n
线断裂,请在模式中包含n
以匹配LF字符。如果要匹配rn
和n
线路断裂,请使用r?n
或简单地使用R
匹配任何Unicode line Break rn
, r
, v
, v, f, f
, n
,u,U +0085,U+2028和U+2029。
匹配c/c ++ /*...*/
多行注释:
ug '/*(.*n)*?.**+/' myfile.cpp
使用预定义的c/comments
模式与-fc/comments
匹配C/C ++注释,仅限于匹配零件,仅带有选项-o
:
ug -of c/comments myfile.cpp
与sed -n '/begin/,/end/p'
相同:要匹配包含begin
的线与包含end
后的第一行之间的所有行,使用懒惰重复:
ug -o '.*begin(.|n)*?end.*' myfile.txt
?返回目录
-A NUM, --after-context=NUM
Output NUM lines of trailing context after matching lines. Places
a --group-separator between contiguous groups of matches. If -o is
specified, output the match with context to fit NUM columns after
the match or shortens the match. See also options -B, -C and -y.
-B NUM, --before-context=NUM
Output NUM lines of leading context before matching lines. Places
a --group-separator between contiguous groups of matches. If -o is
specified, output the match with context to fit NUM columns before
the match or shortens the match. See also options -A, -C and -y.
-C NUM, --context=NUM
Output NUM lines of leading and trailing context surrounding each
matching line. Places a --group-separator between contiguous
groups of matches. If -o is specified, output the match with
context to fit NUM columns before and after the match or shortens
the match. See also options -A, -B and -y.
-y, --any-line
Any line is output (passthru). Non-matching lines are output as
context with a `-' separator. See also options -A, -B, and -C.
--width[=NUM]
Truncate the output to NUM visible characters per line. The width
of the terminal window is used if NUM is not specified. Note that
double wide characters in the output may result in wider lines.
-o, --only-matching
Output only the matching part of lines. If -A, -B or -C is
specified, fits the match and its context on a line within the
specified number of columns.
在匹配行之前和之后显示两行上下文:
ug -C2 'FIXME' myfile.cpp
在匹配的行之后显示三行上下文:
ug -A3 'FIXME.*' myfile.cpp:
在每条匹配行之前使用C函数定义显示一行上下文(C名称是非nunicode):
ug -B1 -f c/functions myfile.c
要在每条匹配行之前使用C ++函数定义显示一行上下文(C ++名称可能是Unicode):
ug -B1 -f c++/functions myfile.cpp
显示任何非匹配行作为与-y
:匹配行的上下文:
ug -y -f c++/functions myfile.cpp
显示一条具有六个六角形上下文的匹配线的六角形:
ug -C1 -UX 'xaaxbbxcc' a.out
使用上下文选项显示一行中的上下文,其中包括选项-o
:
ug -o -C20 'pattern' myfile.cpp
相同,但是带有标题,行号和列号( -k
)的漂亮输出,并显示上下文:
ug --pretty -oC20 'pattern' myfile.cpp
?返回目录
-f FILE, --file=FILE
Read newline-separated patterns from FILE. White space in patterns
is significant. Empty lines in FILE are ignored. If FILE does not
exist, the GREP_PATH environment variable is used as path to FILE.
If that fails, looks for FILE in /usr/local/share/ugrep/pattern.
When FILE is a `-', standard input is read. This option may be
repeated.
--ignore-files[=FILE]
Ignore files and directories matching the globs in each FILE that
is encountered in recursive searches. The default FILE is
`.gitignore'. Matching files and directories located in the
directory of the FILE and in subdirectories below are ignored.
Globbing syntax is the same as the --exclude-from=FILE gitignore
syntax, but files and directories are excluded instead of only
files. Directories are specifically excluded when the glob ends in
a `/'. Files and directories explicitly specified as command line
arguments are never ignored. This option may be repeated to
specify additional files.
-g GLOBS, --glob=GLOBS
Search only files whose name matches the specified comma-separated
list of GLOBS, same as --include='glob' for each `glob' in GLOBS.
When a `glob' is preceded by a `!' or a `^', skip files whose name
matches `glob', same as --exclude='glob'. When `glob' contains a
`/', full pathnames are matched. Otherwise basenames are matched.
When `glob' ends with a `/', directories are matched, same as
--include-dir='glob' and --exclude-dir='glob'. A leading `/'
matches the working directory. This option may be repeated and may
be combined with options -M, -O and -t to expand searches. See
`ugrep --help globs' and `man ugrep' section GLOBBING for details.
-O EXTENSIONS, --file-extension=EXTENSIONS
Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When `ext' is preceded by a `!' or a
`^', skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive search.
-t TYPES, --file-type=TYPES
Search only files associated with TYPES, a comma-separated list of
file types. Each file type corresponds to a set of filename
extensions passed to option -O and filenames passed to option -g.
For capitalized file types, the search is expanded to include files
with matching file signature magic bytes, as if passed to option
-M. When a type is preceded by a `!' or a `^', excludes files of
the specified type. This option may be repeated.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
文件类型用ugrep -tlist
列出。该列表基于已建立的文件名扩展名和“魔术字节”。如果您有未列出的文件类型,请使用选项-O
和/或-M
。您可能需要定义一个别名,例如alias ugft='ugrep -Oft'
作为速记,以使用文件名后缀.ft
搜索文件。
在C/C ++文件( .h
, .hpp
, .c
, .cpp
等)中递归显示功能定义,并带有-tc++
, -o
, -n
和-f c++/functions
的行号。
ug -on -tc++ -f c++/functions
在.c
和.cpp
文件中递归显示功能定义,其中包含-Oc,cpp
, -o
, -n
和-f c++/functions
的行号:
ug -on -Oc,cpp -f c++/functions
递归列出所有带有-tShell
的Shell文件以匹配文件名扩展名和用Shell Shebang的文件,除了带有后缀.sh
的文件外,
ug -l -tShell -O^sh ''
递归用-t^Shell
列出所有非壳文件:
ug -l -t^Shell ''
递归地列出所有没有外壳文件名扩展名的Shell Shebang的Shell Files:
ug -l -tShell -t^shell ''
要在C/C ++注释中搜索使用FIXME
的行,请在多行字符串中排除FIXME
:
ug -n 'FIXME' -f c++/zap_strings myfile.cpp
要从标准输入中读取图案TODO
和FIXME
以读取输入中的线条,同时不包括C ++字符串中的匹配项:
ug -on -f - -f c++/zap_strings myfile.cpp <<END
TODO
FIXME
END
要在XML文件中显示XML元素和属性标签,仅限于-o
匹配部分,不包括放置在(多行)注释中的标签:
ug -o -f xml/tags -f xml/zap_comments myfile.xml
?返回目录
-z, --decompress
Search compressed files and archives. Archives (.cpio, .pax, .tar)
and compressed archives (e.g. .zip, .7z, .taz, .tgz, .tpz, .tbz,
.tbz2, .tb2, .tz2, .tlz, .txz, .tzst) are searched and matching
pathnames of files in archives are output in braces. When used
with option --zmax=NUM, searches the contents of compressed files
and archives stored within archives up to NUM levels. If -g, -O,
-M, or -t is specified, searches files stored in archives whose
filenames match globs, match filename extensions, match file
signature magic bytes, or match file types, respectively.
Supported compression formats: gzip (.gz), compress (.Z), zip, 7z,
bzip2 (requires suffix .bz, .bz2, .bzip2, .tbz, .tbz2, .tb2, .tz2),
lzma and xz (requires suffix .lzma, .tlz, .xz, .txz),
lz4 (requires suffix .lz4),
zstd (requires suffix .zst, .zstd, .tzst),
brotli (requires suffix .br),
bzip3 (requires suffix .bz3).
--zmax=NUM
When used with option -z (--decompress), searches the contents of
compressed files and archives stored within archives by up to NUM
expansion stages. The default --zmax=1 only permits searching
uncompressed files stored in cpio, pax, tar, zip and 7z archives;
compressed files and archives are detected as binary files and are
effectively ignored. Specify --zmax=2 to search compressed files
and archives stored in cpio, pax, tar, zip and 7z archives. NUM
may range from 1 to 99 for up to 99 decompression and de-archiving
steps. Increasing NUM values gradually degrades performance.
用GZIP( .gz
),Compress( .Z
),BZIP2( .bz
, .bz2
, .bzip2
)压缩的文件,lzma( .lzma
),xz( .xz
),lz4( .lz4
),ZSTD(.ZST,.ZST,.ZST, .zst
,, .zstd
),brotli( .br
)和bzip3( .bz3
)在安装相应的库并使用UGREP编译时,使用选项-z
搜索。此选项不需要压缩文件。尽管较慢,但也搜索了未压缩的文件。
可以使用UGREP过滤器搜索其他压缩格式。
使用选项-z
搜索档案(CPIO,JAR,PAX,TAR,ZIP和7Z)。匹配的存档中的常规文件输出,并带有{
和}
括号中的存档路径名。支持的焦油格式为V7,USTAR,GNU,OLDGNU和PAX。支持的CPIO格式是ODC,NEWC和CRC。不支持的是过时的不容易出现的旧二进制CPIO格式。档案格式CPIO,TAR和PAX自动根据其内容自动识别选项-z
,独立于其文件名后缀。
默认情况下,还搜索了存储在邮政编码中的未压缩档案:所有CPIO,PAX和tar文件存储在zip中,而7Z档案将自动识别和搜索。但是,默认情况下,未识别存储在档案中的压缩文件,例如未搜索存储在TAR文件中的ZIP文件,而是搜索所有压缩文件和档案,就好像它们是二进制文件而不对其进行解压缩一样。
指定--zmax=NUM
到搜索包含压缩文件和档案的档案,以深度为NUM
级别。 NUM
的值可能从1到99范围内,最多为99个减压和去构造的步骤,可扩展到99个嵌套档案。较大--zmax=NUM
数值降解性能。对于大多数实际用例,例如搜索存储在焦油文件中的zip文件,您不太可能需要99,因为--zmax=2
足够。
当选项-z
与选项一起使用时-g
, -O
, -M
或-t
,仅搜索与文件名选择标准(Glob,Extension,Magic Bytes或File类型)匹配的压缩和未压缩文件。例如, ugrep -r -z -tc++
搜索C ++文件,例如main.cpp
和zip和tar档案,其中包含c ++文件,例如main.cpp
。搜索中还包括压缩的C ++文件,例如main.cpp.gz
和main.cpp.xz
同样,在搜索存在的任何CPIO,PAX,TAR,ZIP和7Z档案中,都可以搜索其包含的C ++文件,例如main.cpp
。使用选项--stats
查看应用于递归搜索中滤波器路径名的列表以及在搜索存档内容时。
当选项-z
与选项一起使用-g
, -O
, -M
或-t
以搜索CPIO,JAR,PAX,PAX,TAR,ZIP和7Z Archives时,仅搜索符合文件名选择标准的存档文件。
自动检测到GZIP,压缩和拉链格式,这在从标准输入中读取GZIP压缩数据时很有用,例如从管道重定向的输入。其他压缩格式需要文件名词后缀: .bz
, .bz2
或.bzip2
for Bzip2,lzma的.lzma
, .xz
,xz, .lz4
for lz4, .zst
或.zstd
for ZSTD,ZSTD, .br
for brotli for brotli和.bz3
对于BZIP3。还为.tzst
的.txz
, .tbz
, .tbz2
, .tb2
和.tz2
用于.taz
.tgz
焦油存档.tpz
.tlz
要使用来自标准输入的UGREP搜索这些格式,请使用选项--label='stdin.bz2'
用于bzip2, --label='stdin.lzma'
用于lzma, --label='stdin.xz'
用于xz, --label='stdin.lz4
用于lz4和--label='stdin.zst
for ZSTD等。 stdin
这个名字是任意的,可能会被省略:
格式 | 文件名后缀 | 焦油/pax档案短后缀 | 后缀需要吗? | 来自Stdin的Ugrep | 图书馆 |
---|---|---|---|---|---|
压缩包 | .gz | .taz , .tgz , .tpz | 不 | 自动的 | 库兹 |
压缩 | .Z | .taZ , .tZ | 不 | 自动的 | 内置 |
拉链 | .zip , .zipx , .ZIP | 不 | 自动的 | 库兹 | |
7zip | .7z | 是的 | --label=.7z | 内置 | |
压缩包2 | .bz , .bz2 , .bzip2 | .tb2 , .tbz , .tbz2 , .tz2 | 是的 | --label=.bz2 | 库2 |
利兹玛 | .lzma | .tlz | 是的 | --label=.lzma | 利布尔兹马 |
xz | .xz | .txz | 是的 | --label=.xz | 利布尔兹马 |
lz4 | .lz4 | 是的 | --label=.lz4 | liblz4 | |
兹标准 | .zst , .zstd | .tzst | 是的 | --label=.zst | libzstd |
布罗特利 | .br | 是的 | --label=.br | libbrotlidec | |
BZIP3 | .bz3 | 是的 | --label=.bz3 | libbzip3 |
GZIP,BZIP2,XZ,LZ4和ZSTD格式支持串联的压缩文件。串联压缩文件被搜索为一个文件。
存储支持的拉链压缩方法(0),Deflate(8),BZIP2(12),LZMA(14),XZ(95)和ZSTD(93)。 BZIP2,LZMA,XZ和ZSTD方法要求与相应的压缩库一起编译UGREP。
不支持搜索加密的邮递档案(也许在将来发行,具体取决于增强要求)。
与其他方法相比,搜索7ZIP档案需要更多的RAM和更多的时间。 7ZIP LZMA SDK实现不支持流媒体,需要物理可寻求的7Z文件。这意味着将7Z文件嵌套在档案中时无法搜索。最好的是避免7zip。可以使用./build.sh --disable-7zip
禁用对7ZIP的支持以构建UGREP。
Option -z
使用线程进行任务并行性,以通过对解压缩流的搜索同时运行解压缩器来加速搜索较大的文件。
要列出包含package.zip
的所有非空文件。
ug --zmax=2 -z -l '' package.zip
同样,但仅列出了Python源代码文件,包括调用Python的脚本,并带有选项-tPython
( ugrep -tlist
for Sotetial):
ug --zmax=2 -z -l -tPython '' package.zip
要搜索python应用程序作为焦油文件,其依赖项包括为车轮(带有python代码的zip文件),请在app.tgz
中搜索my_class
词:
ug --zmax=2 -z -tPython -w my_class app.tgz
要递归搜索C ++文件,其中包括my_function
一词的压缩文件,而跳过C和C ++注释:
ug -z -r -tc++ -Fw my_function -f cpp/zap_comments
要搜索标准输入上的BZIP2,LZMA,XZ,LZ4和ZSTD压缩数据,选项--label
可用于指定与压缩格式相对应的扩展,以强制减压,例如,当BZIP2扩展名不可用ugrep可用时,例如:
cat myfile.bz2 | ugrep -z --label='stdin.bz2' 'xyz'
要在project.zip
中搜索文件main.cpp
for TODO
和FIXME
行:
ug -z -g main.cpp -w -e 'TODO' -e 'FIXME' project.zip
搜索TARBALL project.tar.gz
使用TODO
和FIXME
行以搜索C ++文件:
ug -z -tc++ -w -e 'TODO' -e 'FIXME' project.tar.gz
在任何情况下,搜索匹配glob *.txt
project.zip
文件license
-g
。
ug -z -g '*.txt' -w -i 'license' project.zip
要通过tarball project.tgz
中的所有C ++文件显示和页面:
ug --pager -z -tc++ '' project.tgz
要列出匹配gitignore-style glob的文件/**/projects/project1.*
in projects.tgz
中,通过选择档案中包含的文件,文本December 12
:
ug -z -l -g '/**/projects/project1.*' -F 'December 12' projects.tgz
要查看带有-Ojar
和-OMF
JAR文件中的META -INF/SUFTEST.MF数据以选择JAR文件和其中的MF文件(需要-Ojar
,否则将跳过JAR文件,尽管我们可以从标准输入):
ug -z -h -OMF,jar '' my.jar
要提取包含project.tgz
的FIXME
的C ++文件,我们将-m1与--format="'%z '"
一起使用-m1
来生成位于档案中匹配fixme word FIXME
的档案中的空间分隔的文件名称列表:
tar xzf project.tgz `ugrep -z -l -tc++ --format='%z ' -w FIXME project.tgz`
要使用find
进行深度优先搜索,然后使用cpio
和ugrep
搜索文件:
find . -depth -print | cpio -o | ugrep -z 'xyz'
?返回目录
--ignore-files[=FILE]
Ignore files and directories matching the globs in each FILE that
is encountered in recursive searches. The default FILE is
`.gitignore'. Matching files and directories located in the
directory of the FILE and in subdirectories below are ignored.
Globbing syntax is the same as the --exclude-from=FILE gitignore
syntax, but files and directories are excluded instead of only
files. Directories are specifically excluded when the glob ends in
a `/'. Files and directories explicitly specified as command line
arguments are never ignored. This option may be repeated to
specify additional files.
-M MAGIC, --file-magic=MAGIC
Only files matching the signature pattern MAGIC are searched. The
signature "magic bytes" at the start of a file are compared to
the MAGIC regex pattern. When matching, the file will be searched.
When MAGIC is preceded by a `!' or a `^', skip files with matching
MAGIC signatures. This option may be repeated and may be combined
with options -O and -t to expand the search. Every file on the
search path is read, making searches potentially more expensive.
-O EXTENSIONS, --file-extension=EXTENSIONS
Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When `ext' is preceded by a `!' or a
`^', skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive search.
-t TYPES, --file-type=TYPES
Search only files associated with TYPES, a comma-separated list of
file types. Each file type corresponds to a set of filename
extensions passed to option -O and filenames passed to option -g.
For capitalized file types, the search is expanded to include files
with matching file signature magic bytes, as if passed to option
-M. When a type is preceded by a `!' or a `^', excludes files of
the specified type. This option may be repeated.
-g GLOBS, --glob=GLOBS
Search only files whose name matches the specified comma-separated
list of GLOBS, same as --include='glob' for each `glob' in GLOBS.
When a `glob' is preceded by a `!' or a `^', skip files whose name
matches `glob', same as --exclude='glob'. When `glob' contains a
`/', full pathnames are matched. Otherwise basenames are matched.
When `glob' ends with a `/', directories are matched, same as
--include-dir='glob' and --exclude-dir='glob'. A leading `/'
matches the working directory. This option may be repeated and may
be combined with options -M, -O and -t to expand searches. See
`ugrep --help globs' and `man ugrep' section GLOBBING for details.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
递归列出以#!
Shebangs:
ug -l -M'#!' ''
递归列出以#
开头但不是#!
Shebangs:
ug -l -M'#' -M'^#!' ''
递归地列出所有Python文件(Extension .py
或shebang)与-tPython
:
ug -l -tPython ''
递归用-t^Shell
列出所有非壳文件:
ug -l -t^Shell ''
递归列出具有导入语句的Python文件(Extension .py
或Shebang),包括带有-.
:
ug -l. -tPython -f python/imports
?返回目录
-Z[best][+-~][MAX], --fuzzy=[best][+-~][MAX]
Fuzzy mode: report approximate pattern matches within MAX errors.
The default is -Z1: one deletion, insertion or substitution is
allowed. If `+`, `-' and/or `~' is specified, then `+' allows
insertions, `-' allows deletions and `~' allows substitutions. For
example, -Z+~3 allows up to three insertions or substitutions, but
no deletions. If `best' is specified, then only the best matching
lines are output with the lowest cost per file. Option -Zbest
requires two passes over a file and cannot be used with standard
input or Boolean queries. Option --sort=best orders matching files
by best match. The first character of an approximate match always
matches a character at the beginning of the pattern. To fuzzy
match the first character, replace it with a `.' or `.?'. Option
-U applies fuzzy matching to ASCII and bytes instead of Unicode
text. No whitespace may be given between -Z and its argument.
模式的开头始终匹配近似匹配的第一个字符,这是一种实用策略,以防止许多虚假的“随机”匹配的短图案。这也大大提高了搜索速度。使第一个字符可选地匹配它,例如p?attern
或使用点作为图案的开始,以匹配任何宽字符(但这很慢)。
线馈( n
)和nul(