[自述文件|使用者指南 |索引 |基準 |問與答]
選項 -Q 開啟查詢 TUI 以在您鍵入時搜尋檔案!
ugrep 速度快、用戶友好,並且配備了大量用戶想要的新功能
包括帶有內建幫助的互動式TUI、帶有AND/OR/NOT 模式的類似Google 搜尋、模糊搜尋、搜尋(嵌套)zip/7z/tar/pax/cpio 檔案、tarball 和壓縮檔案gz/Z/ bz/ bz2/lzma/xz/lz4/zstd/brotli,搜尋和十六進位轉儲二進位文件,搜尋 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
選項分別明確指定模式和負模式,這本質上形成模式main|(?^mainh*()
,其中h
匹配空格和製表符。 ,負模式對於過濾掉我們不感興趣的模式匹配很有用。
再舉一個例子,假設我們可能想要在 C/C++ 註解區塊中搜尋單字FIXME
。為此,我們可以先使用ugrep的預先定義c/comments
模式選擇註解區塊,然後使用管道使用FIXME
選擇行:
ug -R -tc,c++ -nk -f c/comments myproject | ug -w 'FIXME'
使用管道過濾結果通常比使用某些搜尋工具使用的 AND-OR 邏輯更容易。這種方法遵循 Unix 精神,保持實用程式簡單,並將它們組合起來用於更複雜的任務。
讓我們產生一個在 Java 原始碼中找到的所有標識符的排序列表,同時跳過字串和註解:
ug -R -tjava -f java/names myproject | sort -u
這使用在patterns/java/names
中定義的正規表示式p{JavaIdentifierStart}p{JavaIdentifierPart}*
來匹配 Java Unicode 識別碼。
使用傳統的 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
中定義的檔案和目錄。為此,當找到一個或多個.gitignore
檔案時,我們使用--ignore-files
從與.gitignore
中的 glob 匹配的遞歸搜尋中排除任何檔案和目錄:
ug -R -tc++ --ignore-files -f c++/defines
這會在工作目錄中的 C++ 檔案 ( -tc++
) 中搜尋#define
行 ( -f c++/defines
),同時跳過.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.*'
這將傳回 C/C++ 原始碼檔案中所有#define FOO...
巨集的顏色突出顯示列表,跳過.gitignore
中定義的檔案。
請注意, --exclude
的補集不是--include
,因為排除始終優先於包含,因此我們無法可靠地列出使用--include-from='.gitignore'
忽略的檔案。僅存取使用--include
明確指定的檔案和使用--include-dir
明確指定的目錄。 --include-from
列出了被視為要分別添加到--include
和--include-dir
檔案和目錄的 glob。這意味著,當此檔案中未明確列出目錄名稱和目錄路徑時,將不會使用--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 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
時加載配置文件.ugrep,或者在主目錄中找不到配置文件.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
或無法讀取 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
檔案和目錄相符的 glob,這是 gitignore 樣式 glob 模式的逗號分隔清單。按 ESC 鍵將控制項返回查詢模式提示(儲存全域變數)。當一個 glob 前面有一個!
或^
,跳過名稱與/
相符的檔案。否則基本名稱會符合。當 glob 以/
結尾時,目錄將被匹配。Q>
(正常)、 F>
(固定字串)、 G>
(基本正規表示式)、 P>
(Perl 匹配)和Z>
(模糊匹配)之間切換。當顯示--glob=
提示時,可以輸入以逗號分隔的 gitignore 樣式 glob 模式清單。按 ESC 鍵將控制項返回模式提示。--view
指定的分頁器檢視檔案。--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 | 跳到下一個目錄/檔案/上下文 |
Ctrl-T F5 | 切換分割畫面( --split 啟動分割畫面 TUI) |
Ctrl-U | 刪除遊標前的內容 |
Ctrl-V | 逐字字符 |
Ctrl-W | 跳回一個目錄/檔案/上下文 |
Ctrl-X F3 | 設定書籤 |
Ctrl-Y F2 | 檢視或編輯螢幕頂部顯示的文件 |
Ctrl-Z F1 | 查看幫助和選項 |
Ctrl-^ | chdir 返回起始工作目錄 |
Ctrl-] | 切換彩色/單色 |
Ctrl- | 終止行程 |
若要以互動方式搜尋工作目錄及以下目錄中的檔案:
ug -Q
相同,但僅限於 C++ 檔案並忽略.gitignore
檔案:
ug -Q -tc++ --ignore-files
若要以互動方式搜尋工作目錄及以下目錄中的所有 makefile:
ug -Q -g 'Makefile*' -g 'makefile*'
相同,但最多 2 級目錄(工作目錄和 1 層子目錄):
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 查詢選擇模式以互動方式從project.zip
選擇要使用unzip
解壓縮的檔案(按 Enter 鍵選擇行):
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.
如果未指定 FILE 參數並且從終端讀取輸入,則將執行遞歸搜索,就像指定了-r
一樣。若要強制從標準輸入讀取,請指定-
作為 FILE 參數。
要遞歸列出工作目錄中的所有非空檔案:
ug -r -l ''
列出工作目錄中的所有非空文件,但不列出更深層的文件(因為給出了 FILE 參數,在本例中.
代表工作目錄):
ug -l '' .
列出目錄mydir
中但不更深的所有非空檔案(因為給了 FILE 參數):
ug -l '' mydir
若要在遵循符號連結時列出目錄mydir
及更深層中的所有非空白檔案:
ug -R -l '' mydir
要遞歸列出指定路徑上的所有非空文件,同時僅訪問子目錄,即訪問目錄mydir/
和更深一層的子目錄mydir/*/
(請注意-2 -l
可以縮寫為-l2
):
ug -2 -l '' mydir
要遞歸列出目錄mydir
中的所有非空文件,不遵循任何符號連結(除非在命令列上,例如mydir
):
ug -rl '' mydir
要遞歸列出與文字CPP
相符的所有 Makefile:
ug -l -tmake 'CPP'
遞歸列出所有與bin_PROGRAMS
相符的Makefile.*
:
ug -l -g'Makefile.*' 'bin_PROGRAMS'
若要遞歸列出所有副檔名為 .sh 的非空文件,請使用-Osh
:
ug -l -Osh ''
要使用-tShell
遞歸列出基於擴充功能和 shebang 的所有 shell 腳本:
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 | 反向匹配,即如果x 不匹配則匹配 |
x|y | x OR y | 匹配帶有x 或y 行 |
xy | x AND y | 匹配同時包含x 和y 行 |
x
和y
是不以特殊符號|
開頭的子模式、 -
和(
(使用引號或轉義符來匹配它們);
-
和NOT
相同,並且優先於OR
,這意味著-x|y
== (-x)|y
例如。
|
和OR
相同,並且優先於AND
,這意味著例如xy|z
== x (y|z)
;
--stats
選項在搜尋完成後以人類可讀的形式顯示轉換為 CNF(合取範式)的布林查詢。若要在不進行搜尋的情況下顯示 CNF,請從以 EOF 結尾的標準輸入中讀取,例如echo | ugrep -% '...' --stats
。
子模式在輸出中以顏色突出顯示,除了那些以NOT
求反的子模式(當使用 OR-NOT 模式(如x|-y
時, NOT
子模式仍可能顯示在匹配行中))。請注意,子模式可能會重疊。在這種情況下,只有第一個匹配的子模式會以顏色突出顯示。
當子模式匹配換行符時,可以匹配多行。但有一個例外:當X
跨越多行時,以(?=X)
前瞻結尾的子模式可能不符。
空模式匹配任何行(grep 標準)。因此, -% 'x|""|y'
匹配所有內容,且x
和y
不會以顏色突出顯示。選項-y
應用於將每一行顯示為上下文,例如-y 'x|y'
。
類似 Fzf 的交互式查詢(帶有模糊匹配的固定字符串的布爾搜索,例如允許在帶有-w
的單詞中與-Z+4
匹配最多4 個額外字符),按TAB 和ALT-y 查看包含匹配項的文件。按 SHIFT-TAB 和 ALT-l 返回符合檔案清單:
ug -Q -%% -l -w -F -Z+4 --sort=best
若要使用選項--files
遞迴尋找檔案中任意位置包含hot
和dog
的所有檔案:
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
以及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
要在myfile.txt
中尋找包含diner
行或與fast
和food
相符但還bad
行:
ug -% 'diner|(fast food -bad)' myfile.txt
要在myfile.txt
中找到包含fast food
(確切地說)的行或包含diner
但bad
或old
行:
ug -% '"fast food"|diner -bad -old' myfile.txt
相同,但使用具有相同含義的不同布林表達式:
ug -% '"fast food"|diner -(bad|old)' myfile.txt
要在myfile.txt
中尋找暗示good
的有diner
的行(即,顯示沒有diner
的good
行,並顯示有diner
行,但僅顯示帶有good
行,這在邏輯上是隱含的! ):
ug -% 'good|-diner' myfile.txt
ug -e good --not diner myfile.txt
要在myfile.txt
中尋找包含foo
和-bar
以及"baz"
的行(不是-
和"
應該使用轉義符和
--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 $.
另請參閱具有 -%、-%%、--and、--not 的布林查詢模式,以了解比傳統 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+
搜尋不以0
開頭的小數,使用負模式0d+
並排除555
:
ug -e 'd+' -N '0d+' -N 555 myfile.cpp
若要搜尋以disp
開頭的單字,但不符合檔案myfile.py
中的display
,請使用「負模式」 -N '/<display>'
,其中-N
指定一個額外的負模式來跳過符合:
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*
,即模式^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 BOM(位元組順序標記)開頭,則 UTF-16 和 UTF-32 檔案不需要此選項來搜尋它們。其他文件編碼需要選項--encoding=ENCODING
:
編碼 | 範圍 |
---|---|
ASCII | 不適用 |
UTF-8 | 不適用 |
帶有 BOM 的 UTF-16 | 不適用 |
帶有 BOM 的 UTF-32 | 不適用 |
UTF-16 BE 無 BOM | UTF-16 或UTF-16BE |
UTF-16 LE 無 BOM | UTF-16LE |
UTF-32 無 BOM | UTF-32 或UTF-32BE |
UTF-32 無 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=換行符號) | MAC |
MacRoman(CR=換行符號) | MACROMAN |
EBCDIC | EBCDIC |
DOS 代碼頁 437 | CP437 |
DOS 代碼頁 850 | CP850 |
DOS 代碼頁 858 | CP858 |
Windows 代碼頁 1250 | CP1250 |
Windows 代碼頁 1251 | CP1251 |
Windows 代碼頁 1252 | CP1252 |
Windows 代碼頁 1253 | CP1253 |
Windows 代碼頁 1254 | CP1254 |
Windows 代碼頁 1255 | CP1255 |
Windows 代碼頁 1256 | CP1256 |
Windows 代碼頁 1257 | CP1257 |
Windows 代碼頁 1258 | CP1258 |
KOI8-R | KOI8-R |
KOI8-U | KOI8-U |
錦鯉8-RU | KOI8-RU |
請注意,正規表示式模式始終以 UTF-8(包括 ASCII)指定。若要使用二進位模式搜尋二進位文件,請參閱使用 -U、-W 和 -X 搜尋和顯示二進位檔案。
若要遞歸列出所有 ASCII 檔案(即 7 位元):
ug -L '[^[:ascii:]]'
若要遞歸列出所有非 ASCII 文件,即帶有非 ASCII Unicode 字元(U+0080 以上)的 UTF-8、UTF-16 和 UTF-32 文件:
ug -l '[^[:ascii:]]'
若要檢查檔案是否包含非 ASCII Unicode(U+0080 以上):
ug -q '[^[:ascii:]]' myfile && echo "contains Unicode"
從檔案中刪除無效的 Unicode 字元(請注意, -o
可能不起作用,因為檢測到並拒絕了二進位資料並添加了換行符,但--format="%o%
不檢查二進位並“按原樣”複製匹配項):
ug "[p{Unicode}n]" --format="%o" badfile.txt
透過將任何代碼點與.
並使用負模式-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 BOM 的 UTF-16 檔案中搜尋小寫或大寫的lorem
:
ug -iw 'lorem' utf16lorem.txt
若要在該檔案沒有 UTF-16 BOM 時搜尋 utf16lorem.txt,請使用--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.
多行可以透過與換行符相符的模式來匹配。使用選項-o
僅輸出匹配項,而不輸出匹配的完整行。
若要符合n
換行符,請在模式中包含n
以符合 LF 字元。如果要匹配rn
和n
換行符,請使用r?n
或僅使用R
來匹配任何 Unicode 換行符rn
、 r
、 v
、 f
、 n
、 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 名稱是非 Unicode):
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
檔案的簡寫。
要使用-tc++
、 -o
、 -n
和-f c++/functions
遞歸顯示 C/C++ 檔案( .h
、 .hpp
、 .c
、 .cpp
等)中的函式定義及其行號:
ug -on -tc++ -f c++/functions
要使用-Oc,cpp
, -o
, -n
和-f c++/functions
遞歸顯示.c
和.cpp
檔案中帶有行號的函數定義:
ug -on -Oc,cpp -f c++/functions
要使用-tShell
遞歸列出所有 shell 文件以匹配文件副檔名和具有 shell shebang 的文件,但後綴為.sh
的文件除外:
ug -l -tShell -O^sh ''
要使用-t^Shell
遞歸列出所有非 shell 檔案:
ug -l -t^Shell ''
要遞歸列出所有帶有 shell shebang 且沒有 shell 檔案副檔名的 shell 檔案:
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
) 壓縮的文件,當使用 ugrep 安裝並編譯相應的庫時,使用選項-z
搜尋.zstd
)、 brotli ( .br
) 和 bzip3 ( .bz3
)。此選項不需要壓縮檔案。未壓縮的檔案也會被搜索,儘管速度較慢。
其他壓縮格式可以使用ugrep過濾器進行搜尋。
使用選項-z
搜尋檔案(cpio、jar、pax、tar、zip 和 7z)。存檔中匹配的常規檔案將輸出,存檔路徑名括在{
和}
大括號中。支援的 tar 格式有 v7、ustar、gnu、oldgnu 和 pax。支援的 cpio 格式為 odc、newc 和 crc。不支援過時的不可移植的舊二進位 cpio 格式。歸檔格式 cpio、tar 和 pax 可以使用選項-z
根據其內容自動識別,而與檔案名稱後綴無關。
預設情況下,也會搜尋 zip 檔案中儲存的未壓縮檔案:自動識別和搜尋 zip 和 7z 檔案中儲存的所有 cpio、pax 和 tar 檔案。然而,預設情況下,儲存在存檔中的壓縮文件不被識別,例如,不搜尋儲存在tar檔案中的zip文件,而是搜尋所有壓縮檔案和存檔,就好像它們是二進位檔案一樣,而不解壓縮它們。
指定--zmax=NUM
可搜尋包含壓縮檔案的檔案以及最多NUM
層深度的檔案。 NUM
的值範圍可以從 1 到 99,最多可進行 99 個解壓縮和解歸檔步驟,以擴展最多 99 個嵌套歸檔。較大的--zmax=NUM
值會降低效能。您不太可能需要 99,因為--zmax=2
足以滿足大多數實際用例,例如搜尋儲存在 tar 檔案中的 zip 檔案。
當選項-z
與選項-g
、 -O
、 -M
或-t
一起使用時,僅搜尋與檔案名稱選擇條件(glob、副檔名、幻字節或檔案類型)相符的檔案以及壓縮和未壓縮文件。例如, ugrep -r -z -tc++
搜尋 C++ 檔案(例如main.cpp
以及包含 C++ 檔案(例如main.cpp
的 zip 和 tar 檔案。搜尋中還包括壓縮的 C++ 文件,例如main.cpp.gz
和main.cpp.xz
如果存在)。此外,還會搜尋任何 cpio、pax、tar、zip 和 7z 存檔(如果存在)以查找它們包含的 C++ 文件,例如main.cpp
。使用選項--stats
查看在遞歸搜尋和搜尋存檔內容時套用於過濾檔案路徑名的 glob 模式清單。
當選項-z
與選項-g
、 -O
、 -M
或-t
一起使用來搜尋 cpio、jar、pax、tar、zip 和 7z 檔案時,僅搜尋與檔案名稱選擇條件相符的存檔檔案。
自動偵測 gzip、compress 和 zip 格式,這在從標準輸入(例如從管道重定向的輸入)讀取 gzip 壓縮資料時非常有用。其他壓縮格式需要檔名後綴: .bz
、 .bz2
或.bzip2
(表示 bzip2)、. .lzma
(表示 lzma)、. .xz
(表示 xz)、. .lz4
(表示 lz4)、. .zst
或.zstd
(表示zst )、. .br
(表示 brotli 和.bz3
對於 bzip3。此外,還可以辨識 gzip 的壓縮 tar 檔案簡寫.taz
、 .tgz
和.tpz
、 bzip2 的.tbz
、 .tbz2
、 .tb2
和.tz2
、 lzma 的.tlz
、 xz 的.txz
和 zstd 的.tzst
。若要使用 ugrep 從標準輸入搜尋這些格式,請對 bzip2 使用選項--label='stdin.bz2'
,對 lzma 使用--label='stdin.lzma'
,對 xz --label='stdin.xz'
, --label='stdin.lz4
對於 lz4 和--label='stdin.zst
對於 zstd 等等。名稱stdin
是任意的,可以省略:
格式 | 檔案名稱後綴 | tar/pax 存檔短後綴 | 需要後綴嗎? | 來自標準輸入的 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 | libz4 | |
茲標準 | .zst , .zstd | .tzst | 是的 | --label=.zst | 庫茲標準庫 |
布羅特利 | .br | 是的 | --label=.br | 利布羅替克 | |
壓縮包3 | .bz3 | 是的 | --label=.bz3 | libbzip3 |
gzip、bzip2、xz、lz4 和 zstd 格式支援串聯壓縮檔。串聯的壓縮檔案將作為一個檔案進行搜尋。
支援的 zip 壓縮方法有:stored (0)、deflate (8)、bzip2 (12)、lzma (14)、xz (95) 和 zstd (93)。 bzip2、lzma、xz 和 zstd 方法需要使用對應的壓縮函式庫來編譯 ugrep。
不支援搜尋加密的 zip 檔案(也許在未來版本中,取決於增強功能的請求)。
與其他方法相比,搜尋 7zip 檔案需要更多的 RAM 和更多的時間。 7zip LZMA SDK 實作不支援串流,需要物理可尋找的 7z 檔案。這意味著 7z 檔案嵌套在存檔中時無法搜尋。最好避免使用 7zip。可以使用./build.sh --disable-7zip
停用對 7zip 的支援來建構 ugrep。
選項-z
使用執行緒進行任務並行,透過在搜尋解壓縮流的同時運行解壓縮器來加快搜尋較大檔案的速度。
列出package.zip
檔案中儲存的所有非空白文件,包括儲存在其中的所有 cpio、pax、tar、zip 和 7z 檔案的內容:
ug --zmax=2 -z -l '' package.zip
相同,但僅列出 Python 原始碼文件,包括調用 Python 的腳本,並帶有選項-tPython
( ugrep -tlist
了解詳細資訊):
ug --zmax=2 -z -l -tPython '' package.zip
要搜尋以 tar 檔案形式分發的 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
指定壓縮格式對應的擴展名,以在 ugrep 無法使用 bzip2 擴展名時強制解壓,例如:
cat myfile.bz2 | ugrep -z --label='stdin.bz2' 'xyz'
要在project.zip
中的檔案main.cpp
中搜尋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
在任何情況下,要搜尋與project.zip
中的glob *.txt
相符的檔案中的單字license
(請注意,必須引用-g
glob 參數):
ug -z -g '*.txt' -w -i 'license' project.zip
要顯示並翻閱 tarball project.tgz
中的所有 C++ 檔案:
ug --pager -z -tc++ '' project.tgz
若要列出與projects.tgz
中的gitignore樣式glob /**/projects/project1.*
相符的文件,請選擇檔案中包含文字December 12
檔案:
ug -z -l -g '/**/projects/project1.*' -F 'December 12' projects.tgz
要使用-Ojar
和-OMF
查看 jar 檔案中的 META-INF/MANIFEST.MF 數據,以選擇 jar 檔案和其中的 MF 文件( -Ojar
是必需的,否則雖然我們可以從中讀取該jar 文件,但該文件將被跳過標準輸入代替):
ug -z -h -OMF,jar '' my.jar
要從project.tgz
中提取包含FIXME
的 C++ 文件,我們使用-m1
和--format="'%z '"
來產生位於存檔中與單字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.
遞歸列出所有以#!
開頭的文件舍邦:
ug -l -M'#!' ''
遞歸列出所有以#
開頭但不以#!
舍邦:
ug -l -M'#' -M'^#!' ''
要使用-tPython
遞歸列出所有 Python 檔案(副檔名.py
或 shebang):
ug -l -tPython ''
要使用-t^Shell
遞歸列出所有非 shell 檔案:
ug -l -t^Shell ''
遞歸列出具有 import 語句的 Python 檔案(副檔名.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 (