[ README | Benutzerhandbuch | Indizierung | Benchmarks | Fragen und Antworten]
Option -Q öffnet eine Abfrage-TUI, um Dateien während der Eingabe zu durchsuchen!
ugrep ist schnell, benutzerfreundlich und mit einer Menge neuer Funktionen ausgestattet, die sich die Benutzer gewünscht haben
Enthält eine interaktive TUI mit integrierter Hilfe, Google-ähnliche Suche mit UND/ODER/NICHT-Mustern, Fuzzy-Suche, Suche (verschachtelt) in zip/7z/tar/pax/cpio-Archiven, Tarballs und komprimierten Dateien gz/Z/bz/ bz2/lzma/xz/lz4/zstd/brotli, Binärdateien suchen und hexdumpen, Dokumente wie PDF, doc, docx durchsuchen und in JSON, XML ausgeben, CSV oder Ihr eigenes benutzerdefiniertes Format
Erweiterte Unicode-Regex-Mustersyntax mit mehrzeiligem Mustervergleich, ohne dass spezielle Befehlszeilenoptionen erforderlich sind
Enthält einen Dateiindexer, um die Suche in langsamen und kalten Dateisystemen zu beschleunigen
ein echter Drop-in-Ersatz für GNU grep (vorausgesetzt, Sie kopieren oder verknüpfen ug
mit grep
sowie mit egrep
und fgrep
), im Gegensatz zu anderen beliebten grep, die behaupten, „grep-Alternativen“ oder „Ersatz“ zu sein, wenn diese tatsächlich inkompatible Befehlszeilen implementieren Optionen und verwenden Sie einen inkompatiblen Regex-Matcher, d. h. nur Perl-Regex im Vergleich zu POSIX BRE (grep) und ERE (egrep), wenn ugrep alle Regex-Modi unterstützt
Benchmarks zeigen, dass ugrep (eines der) schnellsten grep ist, das den leistungsstarken DFA-basierten Regex-Matcher RE/flex verwendet
Wenn etwas verbessert oder zu ugrep hinzugefügt werden sollte, lassen Sie es mich wissen!
Oberste Priorität hat die Qualitätssicherung, um weiterhin sicherzustellen, dass ugrep keine Fehler aufweist und zuverlässig ist
Lassen Sie ugrep noch schneller laufen, siehe zum Beispiel #432, #421
Teilen Sie reproduzierbare Leistungsergebnisse
ug
ist für die interaktive Nutzung gedacht und lädt eine optionale .ugrep-Konfigurationsdatei mit Ihren Einstellungen im Arbeitsverzeichnis oder Home-Verzeichnis. ug+
durchsucht auch PDFs, Dokumente, E-Books und Bildmetadaten
ugrep
für den Batch-Einsatz wie GNU grep ohne .ugrep-Konfigurationsdatei, ugrep+
durchsucht auch PDFs, Dokumente, E-Books und Bildmetadaten
Entspricht standardmäßig Unicode-Mustern und durchsucht automatisch UTF-8-, UTF-16- und UTF-32-codierte Dateien
Entspricht mehreren Zeilen mit n
oder R
in Regex-Mustern, hierfür sind keine besonderen Optionen erforderlich!
Integrierte Hilfe: ug --help
, wobei ug --help WHAT
Optionen anzeigt, die sich auf WHAT
beziehen, nach dem Sie suchen
ug --help regex
, ug --help globs
, ug --help fuzzy
, ug --help format
.
Benutzerfreundlich mit anpassbaren Konfigurationsdateien, die vom Befehl ug
für die interaktive Verwendung verwendet werden und eine .ugrep-Konfigurationsdatei mit Ihren Einstellungen lädt
ug PATTERN ... ugrep --config PATTERN ...
ug --save-config ...options-you-want-to-save...
speichert eine .ugrep-Konfigurationsdatei im Arbeitsverzeichnis, sodass diese Optionen beim nächsten Ausführen ug
dort verwendet werden. Tun Sie dies in Ihrem Home-Verzeichnis, um eine .ugrep-Konfigurationsdatei mit Optionen zu speichern, die Sie im Allgemeinen verwenden möchten.
Interaktive Abfrage-TUI, drücken Sie F1 oder STRG-Z für Hilfe und TAB/UMSCHALT-TAB, um zu Verzeichnissen und Dateien zu navigieren
ug -Q ug -Q -e PATTERN
-Q
ersetzt PATTERN
in der Befehlszeile, damit Sie Muster interaktiv in die TUI eingeben können. Verwenden Sie in der TUI die Tasten ALT+Buchstaben, um kurze „Buchstabenoptionen“ ein-/auszuschalten, zum Beispiel ALT-n (Option -n
), um Zeilennummern anzuzeigen/auszublenden.
Durchsuchen Sie den Inhalt von Archiven (zip, tar, pax, jar, cpio, 7z) und komprimierten Dateien (gz, Z, bz, bz2, lzma, xz, lz4, zstd, brotli)
ug -z PATTERN ... ug -z --zmax=2 PATTERN ...
Geben Sie -z --zmax=2
an, um komprimierte Dateien und in Archiven verschachtelte Archive zu durchsuchen. Das Argument --zmax
kann zwischen 1 (Standard) und 99 liegen und bis zu 99 Dekomprimierungs- und Dearchivierungsschritte zum Durchsuchen verschachtelter Archive umfassen
Suchen Sie mit Google-ähnlichen booleschen Abfragemustern unter Verwendung von -%
Mustern mit AND
(oder nur einem Leerzeichen), OR
(oder einem Balken |
), NOT
(oder einem Bindestrich -
), der Verwendung von Anführungszeichen für eine exakte Übereinstimmung und der Gruppierung mit ( )
(siehe unten). die linke Seite unten); oder mit den Optionen -e
(als „oder“), --and
, --andnot
und --not
Regex-Mustern (siehe rechts unten):
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' ...
wobei A
, B
und C
beliebige Regex-Muster sind (verwenden Sie die Option -F
, um Zeichenfolgen zu durchsuchen)
Geben Sie die Option -%%
( --bool --files
) an, um die boolesche Abfrage auf Dateien als Ganzes anzuwenden: Eine Datei stimmt überein, wenn alle booleschen Bedingungen durch dateiweite Übereinstimmungsmuster erfüllt sind. Andernfalls gelten boolesche Bedingungen standardmäßig für einzelne Zeilen, da grep-Dienstprogramme im Allgemeinen zeilenbasierte Mustervergleicher sind. Die Option --stats
zeigt die Abfrage in lesbarer Form an, nachdem die Suche abgeschlossen ist.
Durchsuchen Sie PDF, Doc, DocX, E-Book und mehr mit ug+
mithilfe von Filtern, die mit Dateinamenerweiterungen verknüpft sind:
ug+ PATTERN ...
oder geben Sie --filter
mit einem Dateityp an, um ein Filterdienstprogramm zu verwenden:
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 ...
Der Befehl ug+
ist derselbe wie der Befehl ug
, verwendet jedoch zusätzlich Filter zum Durchsuchen von PDFs, Dokumenten und Bildmetadaten
Zeigen Sie den horizontalen Kontext mit der Option -o
( --only-matching
) und den Kontextoptionen -ABC
an, um beispielsweise Übereinstimmungen in sehr langen Zeilen wie Javascript- und JSON-Quellen zu finden:
ug -o -C20 -nk PATTERN longlines.js
-o -C20
passt alle Übereinstimmungen mit Kontext in 20 Zeichen vor und 20 Zeichen nach einer Übereinstimmung an (dh insgesamt 40 Unicode-Zeichen), -nk
gibt Zeilen- und Spaltennummern aus.
Finden Sie ungefähre Musterübereinstimmungen mit der Fuzzy-Suche innerhalb der angegebenen Levenshtein-Distanz
ug -Z PATTERN ... ug -Z3 PATTTERN ...
-Zn
entspricht bis zu n
zusätzlichen, fehlenden oder ersetzten Zeichen, -Z+n
entspricht bis zu n
zusätzlichen Zeichen, -Zn
entspricht bis zu n
fehlenden Zeichen und -Z~n
entspricht bis zu n
ersetzten Zeichen. -Z
ist standardmäßig -Z1
.
Fzf-ähnliche Suche mit Regex (oder festen Zeichenfolgen mit -F
), Fuzzy-Matching mit bis zu 4 zusätzlichen Zeichen mit -Z+4
und Wörtern nur mit -w
, Verwendung von -%%
für dateiweite boolesche Suchen
ug -Q -%% -l -w -Z+4 --sort=best
-l
listet die übereinstimmenden Dateien in der TUI auf. Drücken Sie TAB
und dann ALT-y
um eine Datei anzuzeigen, SHIFT-TAB
und Alt-l
um zurückzugehen und die Liste der übereinstimmenden Dateien anzuzeigen, sortiert nach der besten Übereinstimmung
Durchsuchen Sie Binärdateien und zeigen Sie Hexdumps mit binären Musterübereinstimmungen an (Unicode-Text oder -U
für Bytemuster).
ug --hexdump -U BYTEPATTERN ... ug --hexdump TEXTPATTERN ...
ug -X -U BYTEPATTERN ... ug -X TEXTPATTERN ...
ug -W -U BYTEPATTERN ... ug -W TEXTPATTERN ...
--hexdump=4chC1
zeigt 4
Hexadezimalspalten ohne eine Zeichenspalte c
, ohne Hexadezimalabstand h
und mit einer zusätzlichen Hexadezimalzeile C1
vor und nach einer Übereinstimmung an.
Schließen Sie Dateien ein, um nach Dateitypen oder „magischen Dateibytes“ zu suchen, oder schließen Sie sie mit ^
aus
ug -t TYPE PATTERN ... ug -t ^TYPE PATTERN ...
ug -M 'MAGIC' PATTERN ... ug -M '^MAGIC' PATTERN ...
Schließen Sie Dateien und Verzeichnisse in die Suche ein, die mit Globs im Gitignore-Stil übereinstimmen, oder schließen Sie sie mit ^
aus
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 ...
Schließen Sie Dateien für die Suche nach Dateinamenerweiterungen (Suffix) ein oder schließen Sie sie mit ^
aus, einer Abkürzung für -g"*.EXT"
ug -O EXT PATTERN ... ug -O ^EXT PATTERN ...
Versteckte Dateien (Dotfiles) und Verzeichnisse zum Durchsuchen einbeziehen (standardmäßig weggelassen)
ug -. PATTERN ... ug -g'.*,.*/' PATTERN ...
Geben Sie hidden
in Ihrer .ugrep-Datei an, um versteckte Dateien immer mit ug
zu durchsuchen.
Schließen Sie Dateien aus, die durch .gitignore usw. angegeben sind.
ug --ignore-files PATTERN ... ug --ignore-files=.ignore PATTERN ...
Geben Sie in Ihrer .ugrep-Datei ignore-files
an, um sie immer mit ug
zu ignorieren. Fügen Sie nach Bedarf weitere ignore-files=...
hinzu.
Suchmuster ohne negative Muster („passt zu diesem, aber nicht zu jenem“)
ug -e PATTERN -N NOTPATTERN ... ug -e '[0-9]+' -N 123 ...
Verwenden Sie vordefinierte Regex-Muster, um Quellcode, Javascript, XML, JSON, HTML, PHP, Markdown usw. zu durchsuchen.
ug PATTERN -f c++/zap_comments -f c++/zap_strings ...
ug PATTERN -f php/zap_html ...
ug -f js/functions ... | ug PATTERN ...
Sortieren Sie übereinstimmende Dateien nach Name, bester Übereinstimmung, Größe und Zeit
ug --sort PATTERN ... ug --sort=size PATTERN ...
ug --sort=changed PATTERN ... ug --sort=created PATTERN ...
ug -Z --sort=best PATTERN ... ug --no-sort PATTERN ...
Ausgabeergebnisse in CSV, JSON, XML und benutzerdefinierten Formaten
ug --csv PATTERN ... ug --json PATTERN ...
ug --xml PATTERN ... ug --format='file=%f line=%n match=%O%~' PATTERN ...
ug --help format
zeigt Hilfe zu Format- %
Feldern für eine benutzerdefinierte Ausgabe an.
Suchen Sie mit den Perl-kompatiblen Regex-Mustern von PCRE und zeigen Sie Untermusterübereinstimmungen an oder ersetzen Sie sie
ug -P PATTERN ... ug -P --format='%1 and %2%~' 'PATTERN(SUB1)(SUB2)' ...
Ersetzen Sie Muster in der Ausgabe mit -P und --replace Ersatztext, der optional %
Formatierungsfelder enthält, und verwenden Sie -y
um den Rest der Datei durchzuleiten:
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
zeigt Hilfe zu Format- %
Feldern an, die optional mit --replace
verwendet werden können.
Suchen Sie nach Dateien mit einem bestimmten Kodierungsformat wie ISO-8859-1 bis 16, CP 437, CP 850, MACROMAN, KOI8 usw.
ug --encoding=LATIN1 PATTERN ...
Installieren Sie das neueste ugrep mit Homebrew:
$ brew install ugrep
oder mit MacPorts installieren:
$ sudo port install ugrep
Dadurch werden die Befehle ugrep
und ug
installiert, wobei ug
dasselbe ist wie ugrep
, aber auch die Konfigurationsdatei .ugrep lädt, wenn sie im Arbeitsverzeichnis oder Home-Verzeichnis vorhanden ist.
Installieren Sie mit Winget winget install Genivia.ugrep
Oder installieren Sie es mit Chocolatey choco install ugrep
Oder installieren Sie mit Scoop scoop install ugrep
Oder laden Sie die voll funktionsfähige ausführbare Datei ugrep.exe
als Release-Artefakt von https://github.com/Genivia/ugrep/releases herunter. Die komprimierte Version enthält die Hauptbinärdatei ugrep.exe
sowie ug.exe
. Der ug
-Befehl, der für die interaktive Verwendung gedacht ist, lädt und liest Einstellungen aus der .ugrep
-Konfigurationsdatei (sofern im Arbeitsverzeichnis oder Home-Verzeichnis vorhanden).
Fügen Sie ugrep.exe
und ug.exe
zu Ihrem Ausführungspfad hinzu: Gehen Sie zu Einstellungen und suchen Sie unter „Einstellung suchen“ nach „Pfad“. Wählen Sie Umgebungsvariablen -> Pfad -> Neu und fügen Sie das Verzeichnis hinzu, in dem Sie die ausführbaren Dateien ugrep.exe
und ug.exe
abgelegt haben.
Tipp
Praktische Hinweise zur Verwendung ugrep.exe
und ug.exe
in der Windows-Befehlszeile:
'
, sondern stattdessen "
; die meisten Windows-Befehlsdienstprogramme berücksichtigen die einfachen '
als Teil des Befehlszeilenarguments!-g/GLOB
anstelle der üblichen GLOB
Befehlszeilenargumente angegeben, um Dateien und Verzeichnisse für die Suche auszuwählen, insbesondere bei rekursiven Suchvorgängen.""
angeben, das mit allen Eingaben übereinstimmt, kann dies von einigen Windows-Befehlsinterpretern wie Powershell ignoriert werden. In diesem Fall müssen Sie stattdessen die Option --match
angeben.R
anstelle von n
verwenden, um alle Unicode-Zeilenumbrüche abzugleichen, z. B. rn
Paare und einzelne r
und n
. $ apk add ugrep ugrep-doc
Überprüfen Sie https://pkgs.alpinelinux.org/packages?name=ugrep auf Versionsinformationen.
$ pacman -S ugrep
Überprüfen Sie https://archlinux.org/packages/extra/x86_64/ugrep auf Versionsinformationen.
Aktivieren Sie zunächst das EPEL-Repository, dann können Sie ugrep installieren.
$ dnf install ugrep
Überprüfen Sie https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ für Versionsinformationen.
$ apt-get install ugrep
Überprüfen Sie https://packages.debian.org/ugrep auf Versionsinformationen. Um ugrep
lokal zu erstellen und auszuprobieren, lesen Sie weiter unten die Schritte zum Erstellen von „Alle Plattformen“.
$ dnf install ugrep
Überprüfen Sie https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ für Versionsinformationen.
$ pkg install ugrep
Überprüfen Sie https://www.freshports.org/textproc/ugrep auf Versionsinformationen.
$ pkgman install cmd:ugrep
Überprüfen Sie https://github.com/haikuports/haikuports/tree/master/app-text/ugrep auf Versionsinformationen. Um ugrep
lokal zu erstellen und auszuprobieren, lesen Sie weiter unten die Schritte zum Erstellen von „Alle Plattformen“.
Sie können das Standard-NetBSD-Paketinstallationsprogramm (pkgsrc) verwenden: http://cdn.netbsd.org/pub/pkgsrc/current/pkgsrc/textproc/ugrep/README.html
$ pkg_add ugrep
Überprüfen Sie https://openports.pl/path/sysutils/ugrep auf Versionsinformationen.
$ zypper install ugrep
Überprüfen Sie https://build.opensuse.org/package/show/utilities/ugrep auf Versionsinformationen.
Aktivieren Sie zunächst das EPEL-Repository, dann können Sie ugrep installieren.
$ dnf install ugrep
Überprüfen Sie https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ für Versionsinformationen.
Klonen Sie ugrep
mit
$ git clone https://github.com/Genivia/ugrep
Oder besuchen Sie https://github.com/Genivia/ugrep/releases, um eine bestimmte Version herunterzuladen.
Sie können diese jederzeit später hinzufügen, wenn Sie diese Funktionen benötigen:
Option -P
(reguläre Perl-Ausdrücke) erfordert entweder die PCRE2-Bibliothek (empfohlen) oder die Boost.Regex-Bibliothek (optionaler Fallback). Wenn PCRE2 nicht installiert ist, installieren Sie PCRE2 z. B. mit sudo apt-get install -y libpcre2-dev
oder laden Sie PCRE2 herunter und befolgen Sie die Installationsanweisungen. Alternativ können Sie Boost.Regex herunterladen und ./bootstrap.sh
und sudo ./b2 --with-regex install
ausführen. Siehe Boost: Erste Schritte.
Für die Option -z
(Suche nach komprimierten Dateien und Archiven) muss die zlib-Bibliothek installiert sein. Es ist auf den meisten Systemen installiert. Wenn nicht, installieren Sie es, z. B. mit sudo apt-get install -y libz-dev
. Um .bz
und .bz2
Dateien zu durchsuchen, installieren Sie die bzip2-Bibliothek (empfohlen), z. B. mit sudo apt-get install -y libbz2-dev
. Um .lzma
und .xz
Dateien zu durchsuchen, installieren Sie die lzma-Bibliothek (empfohlen), z. B. mit sudo apt-get install -y liblzma-dev
. Um nach .lz4
Dateien zu suchen, installieren Sie die lz4-Bibliothek (optional, nicht erforderlich), z. B. mit sudo apt-get install -y liblz4-dev
. Um nach .zst
Dateien zu suchen, installieren Sie die zstd-Bibliothek (optional, nicht erforderlich), z. B. mit sudo apt-get install -y libzstd-dev
. Um .br
Dateien zu durchsuchen, installieren Sie die Brotli-Bibliothek (optional, nicht erforderlich), z. B. mit sudo apt-get install -y libbrotli-dev
. Um .bz3
Dateien zu durchsuchen, installieren Sie die bzip3-Bibliothek (optional, nicht erforderlich), z. B. mit sudo apt-get install -y bzip3
.
Tipp
Auch wenn Ihr System über Befehlszeilen-Dienstprogramme wie bzip2
verfügt, bedeutet das nicht unbedingt, dass die Entwicklungsbibliotheken wie libbz2
installiert sind. Die Entwicklungsbibliotheken sollten installiert sein.
Einige Linux-Systeme sind möglicherweise nicht für das Laden dynamischer Bibliotheken von /usr/local/lib
konfiguriert, was beim Ausführen von ugrep
zu einem Fehler beim Laden der Bibliothek führt. Um dies zu korrigieren, fügen Sie export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
zu Ihrer ~/.bashrc
Datei hinzu. Oder führen Sie sudo ldconfig /usr/local/lib
aus.
Führen Sie das Skript ./build.sh
aus, um ugrep
zu erstellen:
$ cd ugrep
$ ./build.sh
Dadurch wird die ausführbare Datei ugrep
im Verzeichnis ugrep/src
mit ./configure
und make -j
erstellt und mit make test
überprüft. Wenn alle Tests erfolgreich sind, wird die ausführbare Datei von ugrep
nach ugrep/bin/ugrep
kopiert und der symbolische Link ugrep/bin/ug -> ugrep/bin/ugrep
für den Befehl ug
hinzugefügt.
Beachten Sie, dass ug
mit ugrep
identisch ist, aber zusätzlich die Konfigurationsdatei .ugrep lädt, wenn sie im Arbeitsverzeichnis oder Home-Verzeichnis vorhanden ist. Das bedeutet, dass Sie Ihre Standardoptionen für ug
in .ugrep definieren können.
Alternative Pfade zu installierten oder lokalen Bibliotheken können mit ./build.sh
angegeben werden. So erhalten Sie Hilfe zu den verfügbaren Build-Optionen:
$ ./build.sh --help
Sie können statische ausführbare Dateien erstellen, indem Sie Folgendes angeben:
$ ./build.sh --enable-static
Dies kann fehlschlagen, wenn Bibliotheken nicht statisch verknüpft sind, wie z. B. Brotli. Versuchen Sie es in diesem Fall mit ./build.sh --enable-static --without-brotli
.
Sie können ugrep
mit aktivierten benutzerdefinierten Standardeinstellungen erstellen, z. B. einem Pager:
$ ./build.sh --enable-pager
Zu den Optionen zum Auswählen von Standardeinstellungen für Builds gehören:
--help
zeigt Build-Optionen an--enable-static
erstellt statische ausführbare Dateien, wenn möglich--enable-hidden
durchsucht immer versteckte Dateien und Verzeichnisse--enable-pager
verwendet immer einen Pager, um die Ausgabe auf Terminals anzuzeigen--enable-pretty
färbt die Ausgabe an Terminals ein und fügt Dateinamenüberschriften hinzu--disable-auto-color
deaktiviert automatische Farben, erfordert die ugrep-Option --color=auto
um Farben anzuzeigen--disable-mmap
deaktiviert speicherzugeordnete Dateien--disable-sse2
deaktiviert SSE2- und AVX-Optimierungen--disable-avx2
deaktiviert die AVX2- und AVX512BW-Optimierungen, kompiliert jedoch mit SSE2, wenn dies unterstützt wird--disable-neon
deaktiviert ARM NEON/AArch64-Optimierungen--with-grep-path
der Standard -f
Pfad, wenn GREP_PATH
nicht definiert ist--with-grep-colors
die Standardfarben, wenn GREP_COLORS
nicht definiert ist Nachdem der Build abgeschlossen ist, kopieren Sie ugrep/bin/ugrep
und ugrep/bin/ug
an einen geeigneten Speicherort, beispielsweise in Ihr ~/bin
-Verzeichnis. Oder, wenn Sie die Befehle und Manpages ugrep
und ug
installieren möchten:
$ sudo make install
Dadurch werden auch die Musterdateien mit vordefinierten Mustern für die Option -f
unter /usr/local/share/ugrep/patterns/
installiert. Die Option -f
überprüft zunächst das Arbeitsverzeichnis auf das Vorhandensein von Musterdateien. Wenn sie nicht gefunden wird, prüft sie die Umgebungsvariable GREP_PATH
, um die Musterdateien zu laden. Wenn sie nicht gefunden wird, liest sie die installierten vordefinierten Musterdateien.
Leider behalten Git-Klone keine Zeitstempel bei, was bedeutet, dass Sie möglicherweise auf „WARNUNG: ‚aclocal-1.15‘ fehlt auf Ihrem System“ stoßen. oder dass der Autoheader beim Ausführen make
nicht gefunden wurde.
Um dieses Problem zu umgehen, führen Sie Folgendes aus:
$ autoreconf -fi
$ ./build.sh
GCC 8 und höher können Warnungen der Art „Hinweis: Parameterübergabe für Argument ... geändert in GCC 7.1“ erzeugen. Diese Warnungen sollten ignoriert werden.
Zum Erstellen von ugrep
in einem Ubuntu-Container ist eine Docker-Datei enthalten.
Entwickler möchten möglicherweise Desinfektionsmittel verwenden, um den ugrep -Code zu überprüfen, wenn sie wesentliche Änderungen vornehmen, beispielsweise um Datenrennen mit dem ThreadSanitizer zu erkennen:
$ ./build.sh CXXFLAGS='-fsanitize=thread -O1 -g'
Wir haben ugrep
mit dem Clang AddressSanitizer, MemorySanitizer, ThreadSanitizer und UndefinedBehaviorSanitizer überprüft. Diese Optionen verursachen einen erheblichen Laufzeitaufwand und sollten nicht für den endgültigen Build verwendet werden.
? Zurück zum Inhaltsverzeichnis
Bitte beachten Sie, dass die Befehle ugrep und ug standardmäßig Binärdateien durchsuchen und .gitignore-spezifische Dateien nicht ignorieren, wodurch rekursive Suchleistungsvergleiche nur sinnvoll sind, wenn die Optionen -I
und --ignore-files
verwendet werden. Um diese Optionen als Standard für ug festzulegen, fügen Sie einfach ignore-binary
und ignore-files
zu Ihrer .ugrep-Konfigurationsdatei hinzu.
Einen aktuellen Leistungsvergleich des neuesten ugrep finden Sie in den ugrep-Leistungsbenchmarks. Ugrep ist schneller als GNU grep, Silver Searcher, ack, sift. Die Geschwindigkeit von Ugrep übertrifft in den meisten Benchmarks die von Ripgrep.
Definieren wir zunächst den Befehl :grep
in Vim, um Dateien rekursiv zu durchsuchen. Fügen Sie dazu die folgenden Zeilen zu Ihrer .vimrc
Datei im Stammverzeichnis hinzu:
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
Dies gibt an, dass mit dem Befehl Vim :grep
die Groß-/Kleinschreibung -j
nicht beachtet wird. Entfernen Sie für Suchvorgänge, bei denen die Groß-/Kleinschreibung beachtet wird, -j
aus grepprg
. Mehrere Übereinstimmungen in derselben Zeile werden im Quickfix-Fenster separat aufgelistet. Wenn dies nicht gewünscht ist, entfernen Sie -u
aus grepprg
. Mit dieser Änderung wird nur die erste Übereinstimmung in einer Zeile angezeigt. Die Option --ignore-files
überspringt Dateien, die in .gitignore
Dateien angegeben sind, sofern vorhanden. Um die Tiefe rekursiver Suchvorgänge nur auf das aktuelle Verzeichnis zu beschränken, hängen Sie -1
an grepprg
an.
Sie können jetzt den Befehl Vim :grep
in Vim aufrufen, um Dateien in einem angegebenen PATH
nach PATTERN
Übereinstimmungen zu durchsuchen:
:grep PATTERN [PATH]
Wenn Sie PATH
weglassen, wird das Arbeitsverzeichnis durchsucht. Verwenden Sie %
als PATH
um nur die aktuell geöffnete Datei in Vim zu durchsuchen:
:grep PATTERN %
Der Befehl :grep
zeigt die Ergebnisse in einem Quickfix-Fenster an, mit dem Sie schnell zu den gefundenen Übereinstimmungen springen können.
So öffnen Sie ein Quickfix-Fenster mit der neuesten Trefferliste:
:copen
Doppelklicken Sie in diesem Fenster auf eine Zeile (oder wählen Sie eine Zeile aus und drücken Sie die Eingabetaste), um zur Datei und zum Speicherort der Übereinstimmung in der Datei zu springen. Geben Sie die Befehle :cn
und :cp
ein, um zum nächsten bzw. vorherigen Treffer zu springen. Um die Suchergebnisse im Quickfix-Fenster zu aktualisieren, greifen Sie einfach darauf zu. Um beispielsweise den mit FIXME
gekennzeichneten C++-Quellcode rekursiv im Arbeitsverzeichnis zu durchsuchen:
:grep -tc++ FIXME
So schließen Sie das Quickfix-Fenster:
:cclose
Sie können ugrep -Optionen mit dem Befehl :grep
verwenden, um beispielsweise ein- und mehrzeilige Kommentare in der aktuellen Datei auszuwählen:
:grep -f c++/comments %
Um Platz zu sparen, wird im Quickfix nur die erste Zeile eines mehrzeiligen Kommentars angezeigt. Um alle Zeilen einer mehrzeiligen Übereinstimmung anzuzeigen, entfernen Sie %-G
aus grepformat
.
Ein beliebtes Vim-Tool ist ctrlp.vim, das installiert wird mit:
$ cd ~/.vim
$ git clone https://github.com/kien/ctrlp.vim.git bundle/ctrlp.vim
CtrlP verwendet ugrep , indem es die folgenden Zeilen zu Ihrer .vimrc
hinzufügt:
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
Dabei überspringt -I
Binärdateien, die Option --ignore-files
überspringt in .gitignore
Dateien angegebene Dateien, sofern vorhanden, und Option -3
beschränkt die Suche in Verzeichnissen auf drei Ebenen (das Arbeitsverzeichnis und bis zu zwei Ebenen darunter).
Starten Sie Vim und geben Sie dann den Befehl ein:
:helptags ~/.vim/bundle/ctrlp.vim/doc
Um die CtrlP-Dokumentation in Vim anzuzeigen, geben Sie den folgenden Befehl ein:
:help ctrlp.txt
? Zurück zum Inhaltsverzeichnis
Dank Manuel Uberti können Sie ugrep jetzt in Emacs verwenden. Um ugrep anstelle von GNU grep in Emacs zu verwenden, fügen Sie die folgende Zeile zu Ihrer .emacs.d/init.el
Datei hinzu:
(setq-default xref-search-program ‘ugrep)
Das bedeutet, dass Emacs-Befehle wie project-find-regexp
die auf Xref basieren, jetzt die Leistungsfähigkeit von ugrep nutzen können.
Darüber hinaus ist es möglich, grep
in den grep-Befehlen von Emacs zu verwenden. Sie können beispielsweise lgrep
mit ugrep
ausführen, indem Sie grep-template
etwa wie folgt anpassen:
(setq-default grep-template "ugrep --color=always -0Iinr -e <R>")
Wenn Sie nicht über Emacs Version 29 (oder höher) verfügen, können Sie Emacs aus dem Emacs-Master-Zweig herunterladen und erstellen oder die XRef-Integration mit ugrep manuell aktivieren:
(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))
? Zurück zum Inhaltsverzeichnis
Das sofort einsatzbereite ugrep unterstützt alle Standard-GNU/BSD-grep-Befehlszeilenoptionen und verbessert auch viele davon. Einzelheiten finden Sie unter „Bemerkenswerte Verbesserungen gegenüber grep“.
Wenn Sie sich genau an GNU/BSD-Grep-ASCII/LATIN1-Nicht-UTF-Unicode-Muster halten möchten, verwenden Sie die Option -U
, um den vollständigen Unicode-Mustervergleich zu deaktivieren.
Tatsächlich wird ugrep
mit den Optionen -U
, -Y
, -.
und --sort
sorgt dafür, dass es sich genau wie egrep
verhält und nur ASCII/LATIN1-Nicht-UTF-Unicode-Muster abgleicht, sodass leere Muster versteckte Dateien abgleichen und durchsuchen können, anstatt sie zu ignorieren. Siehe grep-Äquivalenz.
Sie können praktische grep-Aliase mit oder ohne Optionen -U
, -Y
, -.
und --sort
oder schließen Sie nach Wunsch andere Optionen ein.
Oder Sie können ausführbare grep
, egrep
und fgrep
Dateien erstellen, indem Sie ugrep
in diese Namen kopieren. Wenn die ausführbare Datei ugrep
(oder ugrep.exe
) als grep
( grep.exe
), egrep
( egrep.exe
), fgrep
( fgrep.exe
) kopiert wird, dann Option -U
, -Y
und -.
werden automatisch zusammen mit -G
für grep
, -E
für egrep
und -F
für fgrep
aktiviert. Darüber hinaus ist beim Kopieren als zgrep
, zegrep
und zfgrep
die Option -z
aktiviert. Wenn beispielsweise ugrep
als zegrep
kopiert wird, stehen die Optionen -z
, -E
, -Y
und -.
und --sort
sind aktiviert.
Ebenso funktionieren Symlinks und Hardlinks zu ugrep
gut, um grep
, egrep
und fgrep
Ersetzungen zu erstellen. So erstellen Sie beispielsweise einen Symlink egrep
:
sudo ln -s `which ugrep` /opt/local/bin/egrep
Das /opt/local/bin
ist nur ein Beispiel und kann sich in Ihrem $path
befinden oder auch nicht und kann je nach Ihrem $path
bei der Ausführung von egrep
gefunden werden oder auch nicht.
ugrep entspricht GNU/BSD grep, wenn die folgenden Optionen verwendet werden:
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
Wo:
-U
deaktiviert den Unicode-Wide-Character-Mustervergleich, sodass das Muster xa3
beispielsweise mit Byte A3 übereinstimmt und nicht mit dem Unicode-Codepunkt U+00A3, der durch die UTF-8-Sequenz C2 A3 dargestellt wird. Standardmäßig entspricht xa3
in ugrep U+00A3. Wir empfehlen, -U
nicht für die Suche nach Textmustern zu verwenden, sondern nur für binäre Suchen oder zum Durchsuchen von Latin-1-Dateien (iso-8859-1), ohne diese Dateien als binär zu melden (seit ugrep v3.5.0).-Y
ermöglicht leere Übereinstimmungen, sodass beispielsweise das Muster a*
jede Zeile anstelle einer Folge von a
s“ findet. Standardmäßig stimmt in ugrep das Muster a*
mit einer Folge von a
überein. Darüber hinaus stimmt in ugrep das Muster a*b*c*
mit dem überein, mit dem es standardmäßig übereinstimmen soll. Siehe Verbesserungen.-.
Durchsucht versteckte Dateien (Dotfiles). Standardmäßig werden versteckte Dateien ignoriert, wie die meisten Unix-Dienstprogramme.--sort
gibt die nach Pfadnamen sortierte Ausgabe an, wobei zuerst sortierte übereinstimmende Dateien angezeigt werden, gefolgt von sortierten rekursiven Übereinstimmungen in Unterverzeichnissen. Andernfalls werden übereinstimmende Dateien in keiner bestimmten Reihenfolge gemeldet, um die Leistung zu verbessern.-Dread
und -dread
sind die GNU/BSD-Grep-Standardeinstellungen, werden jedoch nicht empfohlen. Eine Erklärung finden Sie unter „Verbesserungen“.? Zurück zum Inhaltsverzeichnis
Häufig verwendete Aliase zum Hinzufügen zu .bashrc
zur Steigerung der Produktivität:
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)
? Zurück zum Inhaltsverzeichnis
-Q
.n
übereinstimmen.-U
).--bool
).--ignore-files
.-Z
.-z
.-z
.-z
und --zmax=NUM
gespeichert sind, bis zu NUM
Ebenen tief.--filter
unter Verwendung von Formatkonvertierungsdienstprogrammen von Drittanbietern als Plugins.-r
, um Verzeichnisse rekursiv zu durchsuchen.-.
aktiviert).-E
als egrep, während -G
BRE aktiviert).-J1
).-W
(binäre Übereinstimmungen werden in Hex ausgegeben, wobei Textübereinstimmungen wie gewohnt ausgegeben werden) und -X
(alle Übereinstimmungen werden in Hex ausgegeben).--format
).-f
verwendet die Umgebungsvariable GREP_PATH
oder die vordefinierten Muster, die in /usr/local/share/ugrep/patterns
installiert sind. Wenn -f
angegeben ist und auch ein oder mehrere -e
Muster angegeben sind, gelten die Optionen -F
, -x
und -w
nicht für -f
-Muster. Dies soll Verwirrung vermeiden, wenn -f
mit vordefinierten Mustern verwendet wird, die mit diesen Optionen möglicherweise nicht mehr richtig funktionieren.-O
, -M
und -t
geben Dateierweiterungen, Dateisignatur-Magic-Byte-Muster bzw. vordefinierte Dateitypen an. Dies ermöglicht die Suche nach bestimmten Dateitypen in Verzeichnisbäumen, beispielsweise mit den rekursiven Suchoptionen -R
und -r
. Die Optionen -O
, -M
und -t
gelten auch für archivierte Dateien in cpio-, jar-, pax-, tar-, zip- und 7z-Dateien.-k
, --column-number
, um die Spaltennummer anzuzeigen, wobei der Tabulatorabstand durch Erweitern der Tabulatoren berücksichtigt wird, wie durch die Option --tabs
angegeben.-P
(reguläre Perl-Ausdrücke) unterstützt Rückverweise (mit --format
) und Lookbehinds, die die PCRE2- oder Boost.Regex-Bibliothek für einen schnellen Perl-Regex-Abgleich mit einer PCRE-ähnlichen Syntax verwenden.-b
mit der Option -o
oder mit der Option -u
zeigt ugrep den genauen Byte-Offset der Musterübereinstimmung anstelle des Byte-Offsets des Anfangs der übereinstimmenden Zeile an, der von GNU/BSD grep gemeldet wird.-u
, --ungroup
, um nicht mehrere Übereinstimmungen pro Zeile zu gruppieren. Diese Option zeigt für jede weitere Musterübereinstimmung in der Zeile erneut eine übereinstimmende Eingabezeile an. Diese Option ist besonders nützlich mit der Option -c
, um die Gesamtzahl der Musterübereinstimmungen pro Datei statt der Anzahl der pro Datei übereinstimmenden Zeilen zu melden.-Y
von ugrep ermöglicht den Abgleich leerer Muster. Grepping mit Leer-Matching-Mustern ist seltsam und führt bei GNU-Grep und BSD-Grep zu unterschiedlichen Ergebnissen. Leere Übereinstimmungen werden von ugrep standardmäßig nicht ausgegeben, wodurch Fehler vermieden werden, die zu „zufälligen“ Ergebnissen führen könnten. Beispielsweise stimmt das Muster a*
mit GNU/BSD grep mit jeder Zeile in der Eingabe überein und tatsächlich dreimal mit xyz
(den leeren Übergängen vor und zwischen x
, y
und z
). Um leere Übereinstimmungen zuzulassen, ist die ugrep- Option -Y
erforderlich. Muster, die mit ^
beginnen oder mit $
enden, wie z. B. ^h*$
, entsprechen leer. Diese Muster aktivieren automatisch die Option -Y
.-D, --devices=ACTION
wird standardmäßig skip
statt read
. Dadurch wird verhindert, dass Named Pipes in Verzeichnissen, die rekursiv durchsucht werden, unerwartet hängen bleiben, wie es bei GNU/BSD grep passieren kann, das Geräte standardmäßig read
.-d, --directories=ACTION
wird standardmäßig skip
statt read
. Standardmäßig werden in der Befehlszeile angegebene Verzeichnisse durchsucht, jedoch nicht rekursiv tiefer in Unterverzeichnisse hinein.-N PATTERN
, bei denen es sich um Muster der Form (?^X)
handelt, die alle X
Eingaben überspringen und so X
aus der Suche entfernen. Negative Muster können beispielsweise verwendet werden, um Zeichenfolgen und Kommentare zu überspringen, wenn im Quellcode nach Bezeichnern gesucht wird, und um Übereinstimmungen zu finden, die nicht in Zeichenfolgen und Kommentaren enthalten sind. Vordefinierte zap
-Muster verwenden negative Muster. Verwenden Sie beispielsweise -f cpp/zap_comments
, um Musterübereinstimmungen in C++-Kommentaren zu ignorieren.GREP_OPTIONS
, da das Verhalten von ugrep auf jedem System portierbar und vorhersehbar sein muss. Auch GNU grep hat GREP_OPTIONS
aus diesem Grund aufgegeben. Bitte verwenden Sie den Befehl ug
, der die .ugrep-Konfigurationsdatei lädt, die sich im Arbeitsverzeichnis oder im Home-Verzeichnis (falls vorhanden) befindet, oder verwenden Sie Shell-Aliase, um neue Befehle mit spezifischen Suchoptionen zu erstellen.? Zurück zum Inhaltsverzeichnis
So führen Sie eine Suche mithilfe einer Konfigurationsdatei .ugrep
durch, die sich im Arbeitsverzeichnis oder Home-Verzeichnis befindet (beachten Sie, dass ug
dasselbe ist wie ugrep --config
):
ug PATTERN FILE...
Um eine .ugrep
Konfigurationsdatei im Arbeitsverzeichnis zu speichern, bearbeiten Sie diese Datei dann in Ihrem Home-Verzeichnis, um Ihre Einstellungen für ug
Standardeinstellungen anzupassen:
ug --save-config
So durchsuchen Sie das Arbeitsverzeichnis und rekursiv tiefer nach main
(beachten Sie, dass -r
recurse symlinks standardmäßig aktiviert ist, wenn keine Dateiargumente angegeben sind):
ug main
Das Gleiche, aber durchsuchen Sie C++-Quellcodedateien nur rekursiv und ignorieren Sie alle anderen Dateien:
ug -tc++ main
Das Gleiche gilt für die interaktive Abfrage-TUI, beginnend mit dem anfänglichen Suchmuster main
(beachten Sie, dass -Q
mit einem anfänglichen Muster die Option -e
erfordert, da Muster normalerweise interaktiv angegeben werden und alle Befehlszeilenargumente als Dateien/Verzeichnisse betrachtet werden):
ug -Q -tc++ -e main
So suchen Sie nach #define
(und # define
usw.) mithilfe eines Regex-Musters in C++-Dateien (beachten Sie, dass Muster in Anführungszeichen gesetzt werden sollten, um Shell-Globbing von *
und ?
zu verhindern):
ug -tc++ '#[t ]*define'
Um nach main
als Wort ( -w
) rekursiv zu suchen, ohne Symlinks ( -r
) im Verzeichnis myproject
zu folgen, werden die passenden Zeilen- ( -n
) und Spaltennummern ( -k
) neben den übereinstimmenden Zeilen angezeigt:
ug -r -nkw main myproject
Das Gleiche, aber durchsuchen Sie nur myproject
ohne tiefer zu rekursieren (beachten Sie, dass Verzeichnisargumente standardmäßig auf einer Ebene durchsucht werden):
ug -nkw main myproject
Das Gleiche, aber durchsuchen Sie myproject
und eine Unterverzeichnisebene tiefer (zwei Ebenen) mit -2
:
ug -2 -nkw main myproject
Das Gleiche, aber durchsuchen Sie nur C++-Dateien in myproject
und seinen Unterverzeichnissen mit -tc++
:
ug -tc++ -2 -nkw main myproject
Dasselbe, aber auch in Archiven (z. B. ZIP- und TAR-Dateien) und komprimierten Dateien mit -z
suchen:
ug -z -tc++ -2 -nkw main myproject
Durchsuchen Sie rekursiv das Arbeitsverzeichnis nach main
und ignorieren Sie dabei gitignored-Dateien (z. B. vorausgesetzt, dass sich .gitignore
im Arbeitsverzeichnis oder darunter befindet):
ug --ignore-files -tc++ -nkw main
So listen Sie alle Dateien im Arbeitsverzeichnis und tiefer auf, die von .gitignore
Dateien nicht ignoriert werden:
ug --ignore-files -l ''
So zeigen Sie die Liste der Dateinamenerweiterungen und „Magic Bytes“ (Shebangs) an, die entsprechend den -t
Argumenten durchsucht werden:
ug -tlist
Um alle Shell-Dateien rekursiv aufzulisten, basierend auf Erweiterungen und Shebangs mit -l
(beachten Sie, dass ''
mit jeder nicht leeren Datei übereinstimmt):
ug -l -tShell ''
? Zurück zum Inhaltsverzeichnis
Um im Quellcode nach main
zu suchen und dabei Zeichenfolgen und Kommentarblöcke zu ignorieren, können Sie negative Muster mit der Option -N
verwenden, um unerwünschte Übereinstimmungen in in C/C++ zitierten Zeichenfolgen und Kommentarblöcken zu überspringen:
ug -r -nkw -e 'main' -N '"(\.|\r?n|[^\n"])*"|//.*|/*(.*n)*?.**+/' myproject
Das richtig einzugeben ist eine Menge Arbeit! Wenn Sie wie ich sind, möchte ich keine Zeit damit verbringen, mit Regex-Mustern herumzuspielen, wenn ich an etwas Wichtigerem arbeite. Es gibt einen einfacheren Weg, indem Sie die vordefinierten Muster ( -f
) von UGREP verwenden, die mit dem ugrep
-Tool installiert sind:
ug -r -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
Diese Abfrage sucht auch über andere Dateien als C/C ++ - Quellcode wie ReadMes, Makefiles usw. Wir überspringen auch Symlinks mit -r
. Lassen Sie uns diese Abfrage also verfeinern, indem Sie C/C ++ -Dateien nur mit Option -tc,c++
auswählen und Symlinks zu Dateien und Verzeichnissen mit -R
einfügen:
ug -R -tc,c++ -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
Was ist, wenn Sie nur nach dem main
der Bezeichner suchen möchten, jedoch nicht als main(
in diesem Fall, verwenden Sie ein negatives Muster, um unerwünschte mainh*(
Musterübereinstimmungen:
ug -R -tc,c++ -nkw -e 'main' -N 'mainh*(' -f c/zap_strings -f c/zap_comments myproject
Dies verwendet die Optionen -e
und -N
um explizit ein Muster bzw. ein h
Muster anzugeben, wobei im Wesentlichen das Muster main|(?^mainh*()
Negative Muster sind nützlich, um Musterübereinstimmungen herauszufiltern, an denen wir nicht interessiert sind.
Nehmen wir als weiteres Beispiel an, wir möchten in C/C ++ - Kommentarblöcken nach dem Wort FIXME
suchen. Dazu können wir zuerst die Kommentarblöcke mit UGREPs vordefinierter c/comments
-Muster auswählen und dann mit FIXME
Zeilen mithilfe einer Pipe auswählen:
ug -R -tc,c++ -nk -f c/comments myproject | ug -w 'FIXME'
Die Filterergebnisse mit Rohren sind im Allgemeinen einfacher als die Verwendung und Logik, die einige Suchwerkzeuge verwenden. Dieser Ansatz folgt dem Unix -Geist, um die Versorgungsunternehmen einfach zu halten und sie in Kombination für komplexere Aufgaben zu verwenden.
Erstellen wir eine sortierte Liste aller im Java -Quellcode gefundenen Kennungen, während Sie Strings und Kommentare überspringen:
ug -R -tjava -f java/names myproject | sort -u
Dies entspricht den Java -Unicode -Identifikatoren unter Verwendung der Regex p{JavaIdentifierStart}p{JavaIdentifierPart}*
in patterns/java/names
definiert.
Mit herkömmlichen GREP- und Grep-ähnlichen Tools ist es sehr bemüht, rekursiv nach der C/C ++-Quelldatei zu suchen, die die Funktion qsort
definiert, und so etwas wie folgt erfordert:
ug -R --include='*.c' --include='*.cpp' '^([ t]*[[:word:]:*&]+)+[ t]+qsort[ t]*([^;n]+$' myproject
Glücklicherweise können wir mit UGREP einfach alle Funktionsdefinitionen in Dateien mit Erweiterung .c
oder .cpp
mithilfe von Option -Oc,cpp
und vordefinierten functions
aus auswählen, die mit dem Tool installiert sind, um alle Funktionsdefinitionen zu erstellen. Dann wählen wir die, die wir wollen:
ug -R -Oc,cpp -nk -f c/functions | ug 'qsort'
Beachten Sie, dass wir -tc,c++
verwenden können, um C/C ++ -Dateien auszuwählen. Dies enthält jedoch auch Header -Dateien, wenn wir nur .c
und .cpp
-Dateien suchen möchten.
Wir können auch Dateien und Verzeichnisse von der Suche überspringen, die in .gitignore
definiert sind. Um dies zu tun, verwenden wir --ignore-files
um Dateien und Verzeichnisse von rekursiven Suchanfragen auszuschließen, die den Globs in .gitignore
übereinstimmen, wenn eine oder mehrere .gitignore
Dateien gefunden werden:
ug -R -tc++ --ignore-files -f c++/defines
Dies sucht im Arbeitsverzeichnis nach C ++ -Dateien ( -tc++
) nach #define
Zeilen ( -f c++/defines
), während übersprungen und Verzeichnisse in .gitignore
deklariert werden. Wenn Sie dies zu lange finden, um zu tippen, definieren Sie einen Alias, um Github -Verzeichnisse zu durchsuchen:
alias ugit='ugrep -R --ignore-files'
ugit -tc++ -f c++/defines
Zum Hervorheben von Übereinstimmungen, wenn sie durch eine Kette von Rohren gedrückt werden, sollten wir verwenden --color=always
:
ugit --color=always -tc++ -f c++/defines | ugrep -w 'FOO.*'
Dies gibt eine farblich hohe Liste aller #define FOO...
Makros in C/C ++-Quellcode-Dateien zurück, die in .gitignore
definierte Dateien überspringen.
Beachten Sie, dass das Komplement von --exclude
nicht --include
ist, da Ausschlüsse immer Vorrang vor Einschlüssen haben. Daher können wir die Dateien, die mit --include-from='.gitignore'
ignoriert werden, nicht zuverlässig auflisten. Es sind nur mit --include-dir
ausdrücklich angegebene Dateien mit --include
und Verzeichnissen ausdrücklich angegeben. Die --include-from
von Listen von GLIPS, die sowohl Dateien als auch Verzeichnisse als Hinzufügen zu --include
bzw --include-dir
angesehen werden. Dies bedeutet, dass, wenn Verzeichnisnamen und Verzeichnispfade in dieser Datei nicht explizit aufgeführt sind, sie mit --include-from
nicht besucht werden.
Da UGREP überprüft, ob die Eingabe gültig ist, können Sie eine utf-codierte Unicode (sofern nicht -U
verwendet wird) als Filter verwendet, um die von einem Programm erzeugte Nicht-UTF-Ausgabe zu ignorieren:
program | ugrep -I ''
Wenn das Programm eine gültige Ausgabe erzeugt, wird die Ausgabe übergeben, andernfalls wird die Ausgabe option -I
herausgefiltert. Wenn der Ausgang ursprünglich für einen sehr großen Teil gültig ist, aber von ungültiger Ausgabe folgt, kann UGREP die Ausgabe zunächst angeben, jedoch ohne die ungültige Ausgabe, nach der eine weitere Ausgabe blockiert wird.
Zum Filter von Linien, die gültig sind, ASCII oder UTF-codiert, während Sie Linien entfernen, die nicht sind:
program | ugrep '[p{Unicode}--[n]]+'
Beachten Sie, dass p{Unicode}
n
übereinstimmt, aber wir möchten nicht mit der gesamten Datei übereinstimmen! Nur Linien mit [p{Unicode}--[n]]+
.
? Zurück zum Inhaltsverzeichnis
Die Seite Ugrep Man:
man ugrep
Um eine Hilfe zu zeigen:
ug --help
Um Optionen zu zeigen, in denen erwähnt wird, WHAT
:
ug --help WHAT
Um eine Liste der Optionswerte -t TYPES
anzuzeigen:
ug -tlist
Drücken Sie in der interaktiven Abfrage TUI F1 oder Strg-Z für Hilfe und Optionen:
ug -Q
? Zurück zum Inhaltsverzeichnis
--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.
Der Befehl ug
ist für die kontextabhängige interaktive Suche gedacht und entspricht dem Befehl ugrep --config
, um die Konfigurationsdatei .ugrep
zu laden, wenn sie im Arbeitsverzeichnis vorhanden sind oder, wenn sie nicht gefunden wurden, im Home-Verzeichnis:
ug PATTERN ...
ugrep --config PATTERN ...
Der Befehl ug
sortiert auch Dateien nach Namen pro Verzeichnis, das durchsucht wurde. Eine Konfigurationsdatei enthält NAME=VALUE
pro Zeile, wobei NAME
der Name einer langen Option ist (ohne --
) und =VALUE
ist ein Argument, das optional ist und abhängig von der Option weggelassen werden kann. Leere Linien und Linien, die mit einer #
beginnen, werden ignoriert:
# 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
Die Befehlszeilenoptionen werden in der folgenden Reihenfolge analysiert: Zuerst wird die Konfigurationsdatei (Standard- oder benannter) geladen, und dann werden die verbleibenden Optionen und Argumente in der Befehlszeile analysiert.
Option --stats
zeigt die nach der Suche verwendete Konfigurationsdatei an.
Mit den benannten Konfigurationsdateien sollen benutzerdefinierte Suchaufgaben optimiert werden, indem die Anzahl der Befehlszeilenoptionen auf nur eine ---FILE
reduziert wird, um die in FILE
angegebene Sammlung zu verwenden. Die Option --config=FILE
und ihr abgekürztes Formular ---FILE
laden Sie die angegebene Konfigurationsdatei im Arbeitsverzeichnis oder, wenn sie nicht gefunden wurden, im Heimverzeichnis:
ug ---FILE PATTERN ...
ugrep ---FILE PATTERN ...
Ein Fehler wird erstellt, wenn FILE
nicht gefunden wird oder nicht gelesen werden kann.
Mit benannte Konfigurationsdateien können eine Sammlung von Optionen definiert werden, die für die Anforderungen einer Aufgabe im Entwicklungsworkflow eines Projekts spezifisch sind. Zum Beispiel, um ungelöste Probleme zu melden, indem Sie den Quellcode und die Dokumentation für Kommentare mit FixMe- und TODO -Elementen überprüfen. Eine solche benannte Konfigurationsdatei kann in einem Projekt lokalisiert werden, indem sie in das Projektverzeichnis platziert oder durch Platzierung in das Home -Verzeichnis global gemacht werden. Für visuelles Feedback kann ein für diese Aufgabe spezifisches Farbschema mit colors
in der FILE
angegeben werden, um die von einer benannte Konfiguration erzeugte Ausgabe im Gegensatz zur Standardkonfiguration zu identifizieren.
Die Option --save-config
Option speichert eine .ugrep
Konfigurationsdatei in das Arbeitsverzeichnis unter Verwendung der aktuellen Konfiguration, die mit --config
geladen wurde. Dies speichert die aktuelle Konfiguration in Kombination mit zusätzlichen Optionen, wenn auch angegeben. Es werden nur die Optionen gespeichert, die nicht mit anderen Optionen und Optionen in Konflikt geraten können, die sich nicht negativ auf die Suchergebnisse auswirken können.
Die Option --save-config=FILE
speichert die Konfiguration in der angegebenen FILE
. Die Konfiguration wird in die Standardausgabe geschrieben, wenn FILE
a -
ist.
Alternativ kann eine Konfigurationsdatei manuell erstellt oder geändert werden. Eine Konfigurationsdatei kann eine oder mehrere config[=FILE]
enthalten, um die spezifizierte FILE
indirekt zu laden, aber das Laden von Konfigurationen ist untersagt. Der einfachste Weg, um eine Konfigurationsdatei zu erstellen, besteht darin, config
oben in der Datei anzugeben, gefolgt von den langen Optionen zum Überschreiben der Standardeinstellungen.
? Zurück zum Inhaltsverzeichnis
-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.
Diese Option startet eine Benutzeroberfläche, um Suchmuster interaktiv einzugeben:
-c
, Übereinstimmungen zu zählen. Das Drücken von ALT -C wird erneut deaktiviert -c
. Optionen können beim Suchen oder beim Anzeigen des Hilfebildschirms mit der ALT -Taste umgeschaltet werden. Wenn ALT/META-Schlüssel nicht unterstützt werden (z. B. x11 Xterm), drücken Sie Strg-O, gefolgt von der der Option entsprechenden Taste.-g
Datei- und Verzeichnisanpassungs-Globs einzugeben, eine von Kommas getrennte Liste der Globore-Glob-Muster im Gitignore-Stil. Presssing ESC gibt die Kontrolle über die Eingabeaufforderung des Abfragemusters zurück (die Globs werden gespeichert). Wenn einem Globus A vorausgeht !
oder A ^
, überspringt Dateien, deren Name mit der GLOB übereinstimmt, wenn eine Globum eine /
vollständige Pathnames enthält. Ansonsten werden die Basisnamen abgestimmt. Wenn eine Kugel mit A /
endet, werden Verzeichnisse abgestimmt.Q>
(normal), F>
(feste Zeichenfolgen), G>
(Basic Regex), P>
(Perl -Matching) und Z>
(Fuzzy -Matching). Wenn die Eingabeaufforderung --glob=
angezeigt wird, kann eine von Kommas getrennte Liste von Globore-Glob-Muster eingegeben werden. Drücken Sie ESC -Rückgänge zur Steuerung der Muster -Eingabeaufforderung.--view
angegebenen Pager anzuzeigen.--view=COMMAND
angegeben werden. Andernfalls werden die Variablen der PAGER
oder EDITOR
verwendet, um den Befehl mit Strg-y aufzurufen. Dateinamen müssen in der Ausgabe aktiviert und sichtbar sein, um diese Funktion zu verwenden.--color
gefärbt.DELAY
an, wie z. B. 1. niedrigere Werte können die Systemlast jedoch erhöhen, da die Suche nach jeder gedrückten Taste wiederholt initiiert und storniert wird.--heading
standardmäßig aktiviert. Drücken Sie Alt-+, um die Überschriften auszuschalten.Abfrage TUI Key Mapping:
Schlüssel (en) | Funktion |
---|---|
Alt-key | key |
Alt-/ xxxx / | Fügen Sie Unicode -Hex -Codepunkt U+xxxx ein |
Esc Ctrl-C | zurückgehen oder beenden |
Ctrl-Q | Schnelleingang und Ausgabe Die im Auswahlmodus ausgewählten Ergebnisse |
Tab | Chdir zum Verzeichnis der Datei oben im Bildschirm oder die Datei auswählen |
Shift-Tab | Chdir One Level Up oder DeSelect -Datei |
Enter | Geben Sie den Auswahlmodus ein und wechseln Sie ausgewählte Zeilen, um sie beim Ausgang auszugeben |
Up Ctrl-P | nach oben bewegen |
Down Ctrl-N | nach unten bewegen |
Left Ctrl-B | nach links bewegen |
Right Ctrl-F | nach rechts bewegen |
PgUp Ctrl-G | Anzeige nach einer Seite verschieben |
PgDn Ctrl-D | Verschieben Sie die Anzeige mit einer Seite nach unten |
Alt-Up | Verschieben Sie die Anzeige bis 1/2 Seite (macOS Shift-Up ) |
Alt-Down | Die Anzeige um 1/2 Seite nach unten verschieben (macOS Shift-Down ) |
Alt-Left | Verschieben Sie die Anzeige links bis 1/2 Seite (macOS Shift-Left ) links |
Alt-Right | Anzeige rechts bis 1/2 Seite verschieben (macOS Shift-Right ) |
Home Ctrl-A | Bewegen Sie den Cursor zum Beginn der Linie |
End Ctrl-E | Bewegen Sie den Cursor bis zum Ende der Linie |
Ctrl-K | Nach Cursor löschen |
Ctrl-L | Bildschirm aktualisieren |
Ctrl-O + key | Schalten Sie UGREP-Befehlszeilenoption um, die Alt-key key entspricht |
Ctrl-R F4 | Springe zum Lesezeichen |
Ctrl-S | Springen Sie zum nächsten Dir/Datei/Kontext |
Ctrl-T F5 | Split-Bildschirm umschalten ( --split startet einen Teilenbildschirm-TUI) |
Ctrl-U | Vor Cursor löschen |
Ctrl-V | wörtlicher Charakter |
Ctrl-W | Springen Sie einen Dir/Datei/Kontext zurück |
Ctrl-X F3 | Lesezeichen einstellen |
Ctrl-Y F2 | Zeigen oder bearbeiten die Datei oben auf dem Bildschirm angezeigt |
Ctrl-Z F1 | Hilfe und Optionen anzeigen |
Ctrl-^ | Chdir zurück zum Startarbeitsverzeichnis |
Ctrl-] | Farbe/Mono umschalten |
Ctrl- | Prozess beenden |
Um die Dateien im Arbeitsverzeichnis und unten interaktiv zu durchsuchen:
ug -Q
Gleiches, aber nur auf C ++ - Dateien beschränkt und ignorieren .gitignore
Gitignore -Dateien:
ug -Q -tc++ --ignore-files
Um alle Makefiles im Arbeitsverzeichnis und unten interaktiv zu durchsuchen:
ug -Q -g 'Makefile*' -g 'makefile*'
Gleiches, aber für bis zu 2 Verzeichnisse (Arbeiten und eine Unterverzeichnisebene):
ug -Q -2 -g 'Makefile*' -g 'makefile*'
Um den Inhalt von main.cpp
interaktiv zu betrachten und zu durchsuchen, wobei -y
alle nicht anpassenden Zeilen als Kontext anzeigen:
ug -Q -y main.cpp
Um main.cpp
interaktiv zu durchsuchen, beginnend mit dem Suchmuster TODO
und einem Übereinstimmungskontext von 5 Zeilen (der Kontext kann interaktiv aktiviert und deaktiviert werden, überschreibt dies auch die Standardkontextgröße von 2 Zeilen):
ug -Q -C5 -e TODO main.cpp
Um den Inhalt eines Archivs anzuzeigen und zu durchsuchen (z. B. ZIP, Tarball):
ug -Q -z archive.tar.gz
So wählen Sie interaktiv Dateien aus project.zip
aus, um mit unzip
mit dem UGREP -Abfrageauswahlmodus zu dekomprimieren (Drücken Sie die Eingabetaste, um Zeilen auszuwählen):
unzip project.zip `zipinfo -1 project.zip | ugrep -Q`
? Zurück zum Inhaltsverzeichnis
-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.
Wenn keine Dateiargumente angegeben sind und die Eingabe von einem Terminal ausgelesen wird, werden rekursive Suchvorgänge so ausgeführt, wie es -r
angegeben wird. Um das Lesen aus Standardeingaben zu erzwingen, geben Sie -
als Dateiargument an.
So rekursiv alle nicht leeren Dateien im Arbeitsverzeichnis auflisten:
ug -r -l ''
So auflisten Sie alle nicht leeren Dateien im Arbeitsverzeichnis, aber nicht tiefer (da in diesem Fall ein Dateiargument angegeben ist .
Für das Arbeitsverzeichnis):
ug -l '' .
So auflisten Sie alle nicht leeren Dateien im Verzeichnis mydir
, aber nicht tiefer (da ein Dateiargument angegeben ist):
ug -l '' mydir
So auflisten Sie alle nicht leeren Dateien im Verzeichnis mydir
und tiefer, während Sie Symlinks folgen:
ug -R -l '' mydir
So rekursiv alle nicht leeren Dateien auf dem angegebenen Pfad aufzulisten, während Sie nur Unterverzeichnisse besuchen, dh Verzeichnisse mydir/
und Unterverzeichnisse auf einer Ebene tiefere mydir/*/
werden besucht (beachten Sie, dass -2 -l
-l2
werden kann.
ug -2 -l '' mydir
So rekursiv alle nicht leeren Dateien im Verzeichnis mydir
aufzulisten, ohne symbolische Links zu folgen (außer in der Befehlszeile wie mydir
):
ug -rl '' mydir
So rekursiv alle Makefiles auflisten, die dem Text CPP
entsprechen:
ug -l -tmake 'CPP'
So rekursiv alle Makefile.*
Übereinstimmende bin_PROGRAMS
:
ug -l -g'Makefile.*' 'bin_PROGRAMS'
So rekursiv alle nicht leeren Dateien mit Erweiterung .SH mit -Osh
auflisten:
ug -l -Osh ''
So rekursiv alle Shell -Skripte auflisten, basierend auf Erweiterungen und Schäfer mit -tShell
:
ug -l -tShell ''
So rekursiv alle Shell -Skripte auflisten, basierend auf Erweiterungen nur mit -tshell
:
ug -l -tshell ''
? Zurück zum Inhaltsverzeichnis
--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.
Beachten Sie, dass die --and
--not
und --andnot
-Optionen -e PATTERN
erfordern.
Die -%
Option macht alle Muster boolean basiert und unterstützt die folgenden logischen Operationen, die von höchster Vorrang auf die niedrigste Ebene aufgeführt sind:
Operator | Alternative | Ergebnis |
---|---|---|
"x" | Passen Sie x buchstäblich und genau wie angegeben (unter Verwendung der Standard Regex Escapes Q und E ) | |
( ) | Boolesche Expressionsgruppierung | |
-x | NOT x | Invertiertes Match, dh Matches, wenn x nicht übereinstimmt |
x|y | x OR y | entspricht den Zeilen mit x oder y |
xy | x AND y | entspricht den Zeilen mit x und y |
x
und y
sind Untermaterialien, die nicht mit den besonderen Symbolen beginnen |
, -
und (
(verwenden Sie Zitate oder Flucht, um diese zu entsprechen);
-
NOT
dasselbe und nehmen Vorrang vor OR
, was bedeutet, dass -x|y
== (-x)|y
zum Beispiel.
|
und OR
sind gleich und haben Vorrang vor AND
was bedeutet, dass xy|z
== x (y|z)
zum Beispiel;
Die Option --stats
zeigt die booleschen Abfragen in der menschlich-lesbaren Form an, die nach Abschluss der Suche in CNF (Konjunktive Normalform) umgewandelt wurden. Um die CNF ohne Suche anzuzeigen, lesen Sie aus der Standardeingabe, die von einem EOF beendet wurde, wie echo | ugrep -% '...' --stats
.
Subpatterns sind im Ausgang farblich, außer dass diejenigen, die nicht negiert sind, NOT
(ein NOT
-Subpattern kann bei Verwendung eines oder nicht-nicht-Musters wie x|-y
) immer noch in einer passenden Zeile angezeigt werden). Beachten Sie, dass sich Untermaterial überlappen kann. In diesem Fall ist nur das erste passende Untermaterial farblich.
Mehrere Zeilen können übereinstimmen, wenn Subpatterns Newlines übereinstimmen. Es gibt jedoch eine Ausnahme: Subpatters, die mit (?=X)
Lookaheads enden, können nicht übereinstimmen, wenn X
mehrere Zeilen umfasst.
Leere Muster stimmen zu jeder Zeile (GREP -Standard). Daher entspricht -% 'x|""|y'
alles und x
und y
sind nicht farblich. Option -y
sollte verwendet werden, um jede Zeile als Kontext anzuzeigen, z. B. -y 'x|y'
.
FZF -ähnliche interaktive Abfragen (boolesche Suche mit festen Zeichenfolgen mit Fuzzy -Matching, um EG bis zu 4 zusätzliche Zeichen mit -Z+4
in Wörtern mit -w
) zu ermöglichen, drücken Sie die Registerkarte und Alt -y, um eine Datei mit Übereinstimmungen anzuzeigen. Drücken Sie Shift-TAB und ALT-L, um zur Liste der übereinstimmenden Dateien zurückzukehren:
ug -Q -%% -l -w -F -Z+4 --sort=best
Um alle Dateien rekursiv zu finden, die sowohl hot
als auch dog
überall in der Datei mit Option enthalten sind --files
:
ug -%% 'hot dog'
ug --files -e hot --and dog
Um Linien zu finden, die sowohl hot
als auch dog
in myfile.txt
enthalten:
ug -% 'hot dog' myfile.txt
ug -e hot --and dog myfile.txt
Um Linien zu finden place
enthalten, und dann auch hotdog
oder taco
(oder beides) in myfile.txt
:
ug -% 'hotdog|taco place' myfile.txt
ug -e hotdog -e taco --and place myfile.txt
Gleich, aber ausschließliche Linien entsprechen diner
:
ug -% 'hotdog|taco place -diner' myfile.txt
ug -e hotdog -e taco --and place --andnot diner myfile.txt
Um Linien mit diner
oder Linien zu finden, die sowohl fast
als food
in myfile.txt
aber nicht bad
sind, entsprechen:
ug -% 'diner|(fast food -bad)' myfile.txt
Um Linien mit fast food
(genau) oder Linien mit diner
zu finden, aber nicht bad
oder old
in myfile.txt
:
ug -% '"fast food"|diner -bad -old' myfile.txt
Gleiches, aber mit einem anderen booleschen Ausdruck, der die gleiche Bedeutung hat:
ug -% '"fast food"|diner -(bad|old)' myfile.txt
Um Linien mit diner
zu finden, was in myfile.txt
good
impliziert (dh Zeilen mit good
ohne diner
und Zeilen mit diner
, aber nur denen mit good
, was logisch impliziert ist!):
ug -% 'good|-diner' myfile.txt
ug -e good --not diner myfile.txt
Um Linien mit foo
und -bar
und "baz"
in myfile.txt
zu finden (nicht das -
"
sollte mit Escapes und mit
--and -e -bar
abgestimmt werden):
ug -% 'foo -bar "baz"' myfile.txt
ug -e foo --and -e -bar --and '"baz"' myfile.txt
Suchen Sie myfile.cpp
nach Linien mit TODO
oder FIXME
, aber nicht beide in derselben Zeile, wie XOR:
ug -% 'TODO|FIXME -(TODO FIXME)' myfile.cpp
ug -e TODO -e FIXME --and --not TODO --not FIXME myfile.cpp
? Zurück zum Inhaltsverzeichnis
-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 $.
Siehe auch boolesche Abfragemuster mit -%, -%%, -und -Sie für leistungsstärkere Boolesche Abfragemöglichkeiten als die herkömmlichen Optionen für GNU/BSD -GREP.
Zeilen in der Datei myfile.sh
, aber keine Zeilen, die übereinstimmen ^[ t]*#
:
ug -v '^[ t]*#' myfile.sh
Suchen Sie myfile.cpp
nach Linien mit FIXME
und urgent
, aber nicht Scotty
:
ugrep FIXME myfile.cpp | ugrep urgent | ugrep -v Scotty
Gleiches, aber mit -%
für boolesche Abfragen:
ug -% 'FIXME urgent -Scotty' myfile.cpp
So suchen Sie nach Dezimalstellen unter Verwendung von Muster d+
, die nicht mit 0
mit dem negativen Muster 0d+
beginnen und 555
ausschließen:
ug -e 'd+' -N '0d+' -N 555 myfile.cpp
Um nach Wörtern zu suchen, beginnend mit disp
, ohne display
in der Datei myfile.py
mit einem "negativen Muster" -N '/<display>'
zu verwenden, wobei -N
ein zusätzliches negatives Muster angibt, das übereinstimmt: Übereinstimmende Übereinstimmungen:
ug -e '<disp' -N '<display>' myfile.py
So suchen Sie nach Zeilen mit dem Wort display
in der Datei myfile.py
über das Überspringen dieses Wortes in Zeichenfolgen und Kommentaren, wobei -f
Muster in Dateien angibt, die in diesem Fall vordefinierte Muster sind:
ug -n -w 'display' -f python/zap_strings -f python/zap_comments myfile.py
Zeilen anzeigen, die keine leeren Zeilen sind:
ug -x -e '.*' -N 'h*' myfile.py
Gleich, aber mit -v
und -x
mit h*
, dh Muster ^h*$
:
ug -v -x 'h*' myfile.py
So rekursiv alle Python -Dateien auflisten, die das Wort display
nicht enthalten, sodass das Wort in Strings und Kommentaren auftritt:
ug -RL -tPython -w 'display' -f python/zap_strings -f python/zap_comments
? Zurück zum Inhaltsverzeichnis
--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.)
Binär-, ASCII- und UTF-8-Dateien benötigen diese Option nicht, um sie zu durchsuchen. Auch UTF-16- und UTF-32-Dateien erfordern diese Option nicht, um sie zu durchsuchen, wobei angenommen wird, dass die UTF-16- und UTF-32-Dateien wie gewohnt mit einer UTF-BOM (Byte Order Mark) beginnen. Andere Dateicodierungen erfordern eine Option --encoding=ENCODING
:
Codierung | Parameter |
---|---|
ASCII | n / A |
UTF-8 | n / A |
UTF-16 mit BOM | n / A |
UTF-32 mit BOM | n / A |
UTF-16 sein mit Bom | UTF-16 oder UTF-16BE |
UTF-16 Le W/O BOM | UTF-16LE |
UTF-32 W/O BOM | UTF-32 oder UTF-32BE |
UTF-32 W/O BOM | UTF-32LE |
Latein-1 | LATIN1 oder 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 |
Makroman (Cr = Newline) | MACROMAN |
Ebcdic | EBCDIC |
DOS -Code Seite 437 | CP437 |
DOS -Code Seite 850 | CP850 |
DOS -Code Seite 858 | CP858 |
Windows -Code Seite 1250 | CP1250 |
Windows -Code Seite 1251 | CP1251 |
Windows -Code Seite 1252 | CP1252 |
Windows -Code Seite 1253 | CP1253 |
Windows -Code Seite 1254 | CP1254 |
Windows -Code Seite 1255 | CP1255 |
Windows -Code Seite 1256 | CP1256 |
Windows -Code Seite 1257 | CP1257 |
Windows -Code Seite 1258 | CP1258 |
KOI8-R | KOI8-R |
KOI8-U | KOI8-U |
Koi8-ru | KOI8-RU |
Beachten Sie, dass Regex-Muster immer in UTF-8 angegeben sind (einschließlich ASCII). Um Binärdateien mit Binärmustern zu durchsuchen, siehe Suchen und Anzeigen von Binärdateien mit -U, -W und -x.
So rekursiv alle Dateien auflisten, die ASCII (dh 7-Bit) sind:
ug -L '[^[:ascii:]]'
So rekursiv alle Dateien auflisten, die nicht-ASCII-, IE UTF-8-, UTF-16- und UTF-32-Dateien mit Nicht-ASCII-Unicode-Zeichen (U+0080 und UP) sind:
ug -l '[^[:ascii:]]'
So überprüfen Sie, ob eine Datei nicht-ASCII-Unicode (U+0080 und UP) enthält:
ug -q '[^[:ascii:]]' myfile && echo "contains Unicode"
Um ungültige Unicode -Zeichen aus einer Datei zu entfernen (beachten Sie, dass -o
möglicherweise nicht funktioniert, da binäre Daten erkannt und abgelehnt werden und Neuleitungen hinzugefügt werden, aber --format="%o%
prüft nicht Binärer und kopiert die Übereinstimmung" wie ist " ):
ug "[p{Unicode}n]" --format="%o" badfile.txt
So rekursiv Dateien mit ungültigem UTF-Inhalt (dh ungültige UTF-8-Byte-Sequenzen oder Dateien, die UTF-8/16/32 Codepunkte enthalten, die außerhalb des gültigen Unicode-Bereichs enthalten) aufzulisten, indem Sie einen beliebigen Codepunkt mit dem Codepunkt entsprechen .
und durch Verwendung eines negativen Musters -N 'p{Unicode}'
um jedes gültige Unicode -Zeichen zu ignorieren:
ug -l -e '.' -N 'p{Unicode}'
Zeilen mit lachendem Gesicht emojis anzeigen:
ug '[?-?]' emojis.txt
Die gleichen Ergebnisse werden mit x{hhhh}
erhalten, um einen Unicode -Zeichenbereich auszuwählen:
ug '[x{1F600}-x{1F60F}]' emojis.txt
Zeilen von Zeilen mit den Namen Gödel (oder Goedel), Escher oder Bach anzeigen:
ug 'G(ö|oe)del|Escher|Bach' GEB.txt wiki.txt
Suchen Sie in einer UTF-16-Datei, die mit einer UTF-16-BOM gekennzeichnet ist, um nach lorem
in einem unteren oder oberen Fall zu suchen:
ug -iw 'lorem' utf16lorem.txt
So durchsuchen Sie utf16lorem.txt, wenn diese Datei keine UTF-16-BOM mithilfe von --encoding
hat:
ug --encoding=UTF-16 -iw 'lorem' utf16lorem.txt
So durchsuchen Sie die in ISO-8859-1 codierte Datei spanish-iso.txt
:
ug --encoding=ISO-8859-1 -w 'año' spanish-iso.txt
? Zurück zum Inhaltsverzeichnis
-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.
Mehrere Zeilen können mit Mustern übereinstimmen, die Newline -Zeichen entsprechen. Verwenden Sie die Option -o
, um nur die Übereinstimmung auszugeben, nicht die vollständigen Zeilen, die übereinstimmen.
Um mit einem n
Zeilenumbruch zu entsprechen, enthalten Sie n
in das Muster, das dem LF -Zeichen entspricht. r
Sie rn
rn
f
n
Zeilenumbrüchen n
möchten, verwenden Sie R
r?n
v
verwenden +0085, U+2028 und U+2029.
Zu C/C ++ /*...*/
Multi-Line-Kommentaren übereinstimmen:
ug '/*(.*n)*?.**+/' myfile.cpp
Um den C/C ++ -Kommentaren mit den vordefinierten c/comments
mit -fc/comments
anzupassen, beschränkt sich nur mit Option -o
:
ug -of c/comments myfile.cpp
Gleich wie sed -n '/begin/,/end/p'
: Alle Linien zwischen einer Linie mit begin
und der ersten Zeile end
mithilfe von Lazy Repetition übereinstimmen:
ug -o '.*begin(.|n)*?end.*' myfile.txt
? Zurück zum Inhaltsverzeichnis
-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.
So zeigen Sie zwei Kontextlinien vor und nach einer passenden Zeile an:
ug -C2 'FIXME' myfile.cpp
Drei Zeilen von Kontext nach einer übereinstimmenden Zeile zu zeigen:
ug -A3 'FIXME.*' myfile.cpp:
Zeigen Sie vor jeder Übereinstimmung mit einer C-Funktionsdefinition eine Kontextlinie an (C-Namen sind nicht-Unicode):
ug -B1 -f c/functions myfile.c
Zeigen Sie vor jeder Übereinstimmung mit einer C ++ - Funktionsdefinition (C ++ -Namen können möglicherweise ein Unicode sein).
ug -B1 -f c++/functions myfile.cpp
Zeigen Sie nicht übereinstimmende Zeilen als Kontext für die Übereinstimmung von Zeilen mit -y
:
ug -y -f c++/functions myfile.cpp
Einen Hexdump einer passenden Linie mit einer Zeile von Hexdump -Kontext anzeigen:
ug -C1 -UX 'xaaxbbxcc' a.out
Der Kontext innerhalb einer Zeile wird mit Option -o
mit einer Kontextoption angezeigt:
ug -o -C20 'pattern' myfile.cpp
Gleiches, aber mit hübschem Ausgang mit Überschriften, Zeilennummern und Spaltennummern ( -k
) und Zeigen Sie den Kontext:
ug --pretty -oC20 'pattern' myfile.cpp
? Zurück zum Inhaltsverzeichnis
-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.
Die Dateitypen sind mit ugrep -tlist
aufgeführt. Die Liste basiert auf etablierten Dateiname -Erweiterungen und "magischen Bytes". Wenn Sie einen Dateityp haben, der nicht aufgeführt ist, verwenden Sie Optionen -O
und/oder -M
. Möglicherweise möchten Sie einen Alias definieren, z. B. alias ugft='ugrep -Oft'
als Kurzschrift, um Dateien mit Dateiname -Suffix zu durchsuchen .ft
Um Funktionsdefinitionen in C/C ++ -Dateien ( .h
, .hpp
, .c
, .cpp
usw.) rekursiv anzuzeigen, mit Zeilennummern mit -tc++
, -o
, -n
und -f c++/functions
:
ug -on -tc++ -f c++/functions
Funktionsfunktionsdefinitionen in .c
und .cpp
-Dateien mit Zeilennummern mit -Oc,cpp
, -o
, -n
und -f c++/functions
rekursiv anzeigen:
ug -on -Oc,cpp -f c++/functions
So rekursiv alle Shell -Dateien mit -tShell
auf die Dateiname -Erweiterungen und -Dateien mit Shell Shebangs auflisten, mit Ausnahme von Dateien mit Suffix .sh
:
ug -l -tShell -O^sh ''
So rekursiv alle Nicht -Schalen -Dateien mit -t^Shell
auflisten:
ug -l -t^Shell ''
So rekursiv alle Shell -Dateien mit Shell Shebangs auflisten, die keine Shell -Dateinamen -Erweiterungen haben:
ug -l -tShell -t^shell ''
So suchen Sie nach Zeilen mit FIXME
in C/C ++-Kommentaren, ohne FIXME
in Multi-Line-Zeichenfolgen:
ug -n 'FIXME' -f c++/zap_strings myfile.cpp
So lesen Sie Muster TODO
und FIXME
von Standardeingaben zu Übereinstimmungen in der Eingabe, während Sie Übereinstimmungen in C ++ - Zeichenfolgen ausschließen:
ug -on -f - -f c++/zap_strings myfile.cpp <<END
TODO
FIXME
END
So anzeigen XML -Element- und Attribut -Tags in einer XML -Datei angezeigt, die auf den passenden Teil mit -o
beschränkt ist, ausgenommen Tags, die in (Multi -Line -Kommentaren) platziert sind:
ug -o -f xml/tags -f xml/zap_comments myfile.xml
? Zurück zum Inhaltsverzeichnis
-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.
Dateien, die mit GZIP ( .gz
), Compress ( .Z
), BZIP2 ( .bz
, .bz2
, .bzip2
), LZMMA ( .lzma
), xz ( .xz
), lz4 ( .lz4
), ZSTD (.zst, .ZST, komprimiert wurden .zst
komprimiert. .zstd
), brotli ( .br
) und bzip3 ( .bz3
) werden mit Option durchsucht -z
Wenn die entsprechenden Bibliotheken mit UGREP installiert und kompiliert werden. Bei dieser Option müssen keine Dateien komprimiert werden. Unkomprimierte Dateien werden auch durchsucht, obwohl langsamer.
Andere Komprimierungsformate können mit UGREP -Filtern durchsucht werden.
Archive (CPIO, JAR, PAX, TAR, ZIP und 7Z) werden mit Option -z
durchsucht. Regelmäßige Dateien in einem Archiv, das übereinstimmt, werden mit den Archiv -Pfadnamen ausgegeben, die in {
und }
Klammern eingeschlossen sind. Unterstützte Teerformate sind V7, Ustar, GNU, Oldgnu und Pax. Unterstützte CPIO -Formate sind ODC, NewC und CRC. Nicht unterstützt ist das veraltete nicht portable alte binäre CPIO-Format. Archivformate CPIO, TAR und PAX werden automatisch mit Option -z
anhand ihres Inhalts erkannt, unabhängig von ihrem Dateinamen -Suffix.
Standardmäßig werden unkomprimierte Archive, die in ZIP -Archiven gespeichert sind, auch durchsucht: Alle in ZIP- und 7Z -Archive gespeicherten CPIO-, PAX- und TAR -Dateien werden automatisch erkannt und gesucht. Standardmäßig werden komprimierte Dateien, die in Archiven gespeichert sind, nicht erkannt, z. B. in TAR -Dateien gespeicherte ZIP -Dateien werden nicht durchsucht, sondern alle komprimierten Dateien und Archive werden so durchsucht, als ob sie Binärdateien sind, ohne sie zu dekomprimieren.
Geben Sie --zmax=NUM
an Sucharchive an, die komprimierte Dateien und Archive für bis zu NUM
Ebenen enthalten. Der Wert der NUM
kann zwischen 1 und 99 für bis zu 99 Dekompressionen und de-alchivierende Schritte reichen, um bis zu 99 verschachtelte Archive zu erweitern. Größer --zmax=NUM
beeinträchtigen die Leistung. Es ist unwahrscheinlich, dass Sie jemals 99 als --zmax=2
für die meisten praktischen Anwendungsfälle benötigen, z. B. in TAR -Dateien gesucht werden.
Wenn Option -z
mit Optionen -g
, -O
, -M
oder -t
verwendet wird, werden Archive und komprimierte und unkomprimierte Dateien, die den Dateinamen -Auswahlkriterien (GLOB, Erweiterung, magische Bytes oder Dateityp) übereinstimmen, nur durchsucht. Beispielsweise sucht ugrep -r -z -tc++
C ++ -Dateien wie main.cpp
und ZIP- und TAR -Archive, die C ++ -Dateien wie main.cpp
enthalten. Ebenfalls in der Suche enthalten sind C ++ - Dateien wie main.cpp.gz
und main.cpp.xz
, wenn sie vorhanden sind. Auch jeder CPIO-, PAX-, TAR-, ZIP- und 7Z -Archive, wenn sie vorhanden sind, werden nach C ++ - Dateien gesucht, die sie enthalten, wie z. B. main.cpp
. Verwenden Sie die Option --stats
, um eine Liste der auf Filterdatei -Pfadnamen angewendeten Glob -Muster in der rekursiven Suche und beim Durchsuchen von Archivinhalten anzuzeigen.
Wenn Option -z
mit Optionen -g
, -O
, -M
oder -t
verwendet wird, um CPIO-, JAR-, PAX-, TAR-, ZIP- und 7Z -Archive zu durchsuchen, werden archivierte Dateien, die den Dateinamenauswahlkriterien entsprechen, nur durchsucht.
Die GZIP-, Komprimierungs- und ZIP-Formate werden automatisch erkannt, was beim Lesen von gzip-komprimierten Daten aus Standardeingaben nützlich ist, z. B. aus einem Rohr umgeleitet. Andere Komprimierungsformate erfordern ein Dateiname -Suffix: .bz
, .bz2
, oder .bzip2
für bzip2, .lzma
für lzma, .xz
für xz, .lz4
für lz4, .zst
oder .zstd
für zstd, .br
für brotli und .bz3
für BZIP3. Auch das komprimierte Teerarchiv -Verurteilungen .taz
, .tgz
und .tpz
für gzip, .tbz
, .tbz2
, .tb2
und .tz2
für bzip2, .tlz
für lzma, .txz
für xz und .tzst
für zstd werden erkannt. Um diese Formate mit UGREP aus Standardeingang zu durchsuchen, verwenden Sie die Option --label='stdin.bz2'
für BZIP2, --label='stdin.lzma'
für LZMA, --label='stdin.xz'
für XZ, -für XZ, --label='stdin.lz4
für LZ4 und --label='stdin.zst
für ZSTD und so weiter. Der Name stdin
ist willkürlich und kann weggelassen werden:
Format | Dateiname -Suffix | TAR/PAX -Archiv -Kurzsuffix | Suffix erforderlich? | Ugrep von Stdin | Bibliothek |
---|---|---|---|---|---|
gzip | .gz | .taz , .tgz , .tpz | NEIN | automatisch | libz |
Kompresse | .Z | .taZ , .tZ | NEIN | automatisch | eingebaut |
Reißverschluss | .zip , .zipx , .ZIP | NEIN | automatisch | libz | |
7zip | .7z | Ja | --label=.7z | eingebaut | |
BZIP2 | .bz , .bz2 , .bzip2 | .tb2 , .tbz , .tbz2 , .tz2 | Ja | --label=.bz2 | libbz2 |
Lzma | .lzma | .tlz | Ja | --label=.lzma | LIBLZMA |
xz | .xz | .txz | Ja | --label=.xz | LIBLZMA |
LZ4 | .lz4 | Ja | --label=.lz4 | liblz4 | |
ZSTD | .zst , .zstd | .tzst | Ja | --label=.zst | libzstd |
Brotli | .br | Ja | --label=.br | libbrotlidec | |
BZIP3 | .bz3 | Ja | --label=.bz3 | libbzip3 |
Die Formate GZIP-, BZIP2-, XZ-, LZ4- und ZSTD -Formate unterstützen verkettete komprimierte Dateien. Verkettete komprimierte Dateien werden als eine einzige Datei durchsucht.
Unterstützte Zip -Komprimierungsmethoden werden (0), Deflate (8), BZIP2 (12), LZMA (14), XZ (95) und ZSTD (93) gespeichert. Die Methoden BZIP2-, LZMA-, XZ- und ZSTD -Methoden erfordern, dass UGREP mit den entsprechenden Kompressionsbibliotheken kompiliert wird.
Die Suche nach verschlüsselten Zip -Archiven wird nicht unterstützt (möglicherweise in zukünftigen Veröffentlichungen, abhängig von Anfragen nach Verbesserungen).
Durch die Suche nach 7zip -Archiven ist viel mehr RAM und mehr Zeit im Vergleich zu anderen Methoden erforderlich. Die 7ZIP -LZMMA -SDK -Implementierung unterstützt kein Streaming und erfordert eine physische 7Z -Datei. Dies bedeutet, dass 7Z -Dateien nicht durchsucht werden können, wenn sie innerhalb der Archive verschachtelt sind. Am besten vermeiden 7zip. Die Unterstützung für 7zip kann mit ./build.sh --disable-7zip
deaktiviert werden, um UGREP zu erstellen.
Option -z
verwendet Threads für die Aufgabeparallelität, um die Suche nach größeren Dateien zu beschleunigen, indem der Dekompressor gleichzeitig mit einer Suche nach dem dekomprimierten Stream ausgeführt wird.
So auflisten Sie alle nicht leeren Dateien auf, die in einem package.zip
Archiv gespeichert sind, einschließlich des Inhalts aller CPIO-, PAX-, TAR-, ZIP- und 7Z-Dateien, die darin gespeichert sind:
ug --zmax=2 -z -l '' package.zip
Gleiches, aber listet nur die Python -Quellcode -Dateien auf, einschließlich Skripten, die Python aufrufen, mit Option -tPython
( ugrep -tlist
FÜR DENTAION):
ug --zmax=2 -z -l -tPython '' package.zip
So suchen Sie Python -Anwendungen, die als TAR -Datei mit ihren Abhängigkeiten als Räder (ZIP -Dateien mit Python -Code) verteilt sind, nach dem Wort my_class
in app.tgz
:
ug --zmax=2 -z -tPython -w my_class app.tgz
Um rekursiv C ++ - Dateien einschließlich komprimierter Dateien nach dem Wort my_function
zu durchsuchen, während Sie C- und C ++ - Kommentare überspringen:
ug -z -r -tc++ -Fw my_function -f cpp/zap_comments
So durch die Suche nach BZIP2-, LZMA-, XZ-, LZ4- und ZSTD -Komprimierungsdaten zur Standardeingabe, Option --label
können verwendet werden, um die Erweiterung anzugeben, die dem Komprimierungsformat entspricht, um Dekompression zu erzwingen, wenn die BZIP2 -Erweiterung nicht für UGREP verfügbar ist: z.
cat myfile.bz2 | ugrep -z --label='stdin.bz2' 'xyz'
So durchsuchen Sie die Datei main.cpp
in project.zip
für TODO
und FIXME
-Zeilen:
ug -z -g main.cpp -w -e 'TODO' -e 'FIXME' project.zip
So durchsuchen Sie Tarball project.tar.gz
nach C ++ - Dateien mit TODO
und FIXME
-Zeilen:
ug -z -tc++ -w -e 'TODO' -e 'FIXME' project.tar.gz
Um Dateien zu durchsuchen, die dem Glob *.txt
in project.zip
nach der Word license
in jedem Fall entsprechen (Beachten Sie, dass das Argument -g
Glob zitiert werden muss):
ug -z -g '*.txt' -w -i 'license' project.zip
So anzeigen und durch alle C ++ - Dateien in Tarball project.tgz
anzeigen:
ug --pager -z -tc++ '' project.tgz
So listen die Dateien auf, die mit dem Gitignore-Stil GLIB /**/projects/project1.*
in projects.tgz
übereinstimmen, indem Dateien im Archiv des Textes December 12
ausgewählt werden:
ug -z -l -g '/**/projects/project1.*' -F 'December 12' projects.tgz
So sehen Sie die Daten meta -inf/Manifest.mf in einer JAR -Datei mit -Ojar
und -OMF
an, um die JAR -Datei und die darin -Ojar
MF Standardeingabe stattdessen):
ug -z -h -OMF,jar '' my.jar
Um C ++ -Dateien zu extrahieren, die FIXME
aus project.tgz
enthalten, verwenden wir -m1
mit --format="'%z '"
um eine platz getrennte Liste von Pathnames der Datei zu generieren, die sich im Archiv befinden, das mit dem Wort FIXME
übereinstimmt:
tar xzf project.tgz `ugrep -z -l -tc++ --format='%z ' -w FIXME project.tgz`
Um eine Tiefe-First-Suche mit find
durchzuführen, verwenden Sie cpio
und ugrep
um die Dateien zu durchsuchen:
find . -depth -print | cpio -o | ugrep -z 'xyz'
? Zurück zum Inhaltsverzeichnis
--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.
So rekursiv alle Dateien auflisten, die mit #!
Shebangs:
ug -l -M'#!' ''
So rekursiv alle Dateien auflisten, die mit #
beginnen, aber nicht mit #!
Shebangs:
ug -l -M'#' -M'^#!' ''
So rekursiv alle Python -Dateien (Erweiterung .py
oder ein Schebang) mit -tPython
auflisten:
ug -l -tPython ''
So rekursiv alle Nicht -Schalen -Dateien mit -t^Shell
auflisten:
ug -l -t^Shell ''
To recursively list Python files (extension .py
or a shebang) that have import statements, including hidden files with -.
:
ug -l. -tPython -f python/imports
? Back to table of contents
-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.
The beginning of a pattern always matches the first character of an approximate match as a practical strategy to prevent many false "randomized" matches for short patterns. This also greatly improves search speed. Make the first character optional to optionally match it, eg p?attern
or use a dot as the start of the pattern to match any wide character (but this is slow).
Line feed ( n
) and NUL (