Vorwort Apropos Textsuchtools: Jeder sollte grep kennen, eines der nützlichsten und am häufigsten verwendeten Tools in Linux. Wenn Sie jedoch in einem großen Ingenieurprojekt nach einem Schlüsselwort suchen möchten, müssen Sie wissen, dass dies zeitaufwändig ist. Es gibt viele alternative Tools, die bekanntesten sind Ack, Ag Vor kurzem ist eine neue Alternative aufgetaucht: Ripgrep. Dieses Tool verwendet Multithreading wie Ack/Ag, aber rg ist schneller als diese. Einführung ripgrep ist ein zeilenbasiertes Suchwerkzeug, das das angegebene Verzeichnis rekursiv nach dem bereitgestellten Muster durchsucht. Es ist in der Sprache Rust geschrieben und im Vergleich zu ähnlichen Tools unglaublich schnell. Einige der Funktionen sind wie folgt: - Automatische rekursive Suche (grep erfordert -R)
- Dateien in .gitignore und Binärdateien automatisch ignorieren
- Sie können nach einem bestimmten Dateityp suchen (rg -tpy foo begrenzt Python-Dateien, rg -Tjs foo schließt JS-Dateien aus).
- Unterstützt die meisten Grep-Funktionen (alle häufig verwendeten)
- Unterstützt verschiedene Dateikompilierungen (UTF-8, UTF-16, Latin-1, GBK, EUC-JP, Shift_JIS usw.)
- Unterstützt die Suche nach gängigen komprimierten Dateien (gzip, xz, lzma, bzip2, lz4)
- Passende Ergebnisse automatisch hervorheben
- Kürzere Befehlsnamen rg (grep besteht aus vier Zeichen)
- Unterstützt keine mehrzeiligen Suchen und ausgefallene reguläre Ausdrücke
Installieren Sie ripgrep Installieren Sie zuerst RUST
curl https://sh.rustup.rs -sSf | sh Dann drücken Sie einfach die Eingabetaste. Installieren Sie Rigpre mit RUST
Git-Klon https://github.com/BurntSushi/ripgrep
CD-Ripgrep
Frachtbau --Release
cp ./target/release/rg /usr/local/bin/ Der letzte Schritt besteht darin, es entsprechend Ihrer Situation in einen Pfad in PATH einzufügen. verwenden Anzeige der Suchergebnisse 
Verwendung Allgemeines Format
VERWENDUNG:
rg [OPTIONEN] MUSTER [PFAD ...]
rg [OPTIONEN] [-e MUSTER ...] [-f MUSTERDATEI ...] [PFAD ...]
rg [OPTIONEN] --files [PFAD ...]
rg [OPTIONEN] --type-list
Befehl | rg [OPTIONEN] MUSTER Eingabeparameter
ARGS:
<MUSTER>
Ein regulärer Ausdruck, der für die Suche verwendet wird. Um ein Muster zu finden, das mit einem
Bindestrich, verwenden Sie das Flag -e/--regexp.
Um beispielsweise nach dem Literal „-foo“ zu suchen, können Sie dieses Flag verwenden:
rg -e -foo
Sie können auch das spezielle Trennzeichen '--' verwenden, um anzugeben, dass keine weiteren Flags
wird bereitgestellt. Das Folgende ist nämlich gleichwertig zum obigen:
rg -- -foo
<PFAD>…
Eine zu durchsuchende Datei oder ein zu durchsuchendes Verzeichnis. Verzeichnisse werden rekursiv durchsucht. Pfade, die auf
die Befehlszeile überschreibt Glob und ignoriert Regeln. Optionen | Beschreibung | andere |
---|
-A, --after-context <ZAHL> | <NUM> Zeilen nach dem übereinstimmenden Inhalt anzeigen | Wird --context überschreiben | -B, --before-context <ZAHL> | <NUM> Zeilen vor dem passenden Inhalt anzeigen | Wird --context überschreiben | -b, --byte-offset | Zeigt den Byte-Offset des passenden Inhalts in der Datei an | Verwenden Sie es mit -o, um nur den Offset zu drucken. | -s, --case-sensitive | Groß-/Kleinschreibung beachten | Überschreibt -i (Groß-/Kleinschreibung ignorieren), -S (Smart Case) | --color <WANN> | Wann soll Farbe verwendet werden? Standardmäßig ist „Auto“ | Wenn --vimgre verwendet wird, ist der Standardwert nie | | Die Optionen sind: nie, automatisch, immer, ansi | | --colors <FARBENSPEZIFIKATION>… | Legen Sie die Ausgabefarbe fest: | Farbe: rot, blau, grün, cyan | | {type}:{attribute}:{value} | Magenta, Gelb, Weiß, Schwarz | | {type} : Pfad, Zeile, Spalte, Übereinstimmung | Stil: nobold, bold, nointense | | {attribute} : fg, bg, Stil | intensiv, keine Unterstreichung, Unterstreichung | | {value} : eine Farbe oder ein Textstil | Beispiel: | | {type}:none löscht die Farbeinstellung von {type} | rg --colors 'Übereinstimmung:fg:magenta' --colors 'Zeile:bg:gelb' foo | | | Der erweiterte Farbsatz kann von {value} verwendet werden, wenn das Terminal ANSI-Farben unterstützt. | | | Die Beschreibungsmethode ist „x“ (256 Farben) oder „x,x,x“ (24-Bit-Echtfarben). | | | x ist ein Wert zwischen 0 und 255, der Standardwert ist dezimal und das Präfix 0x ist hexadezimal | | | Beispiel: rg --colors 'match:bg:0,128,255' | | | oder gleichwertig: rg --colors 'match:bg:0x0,0x80,0xFF' | | | Bei Verwendung des erweiterten Farbcodes sind die Optionen „Intense“ und „Nointense“ ungültig. | --Spalte | Die Spaltennummer der ersten Übereinstimmung (beginnend bei 1) | Kann durch --no-column deaktiviert werden | -C, --context <ZAHL> | <NUM> Zeilen vor und nach der Übereinstimmung anzeigen | Dies überschreibt die Optionen -B und -A. | --context-separator <TRENNZEICHEN> | Wird verwendet, um nicht aufeinanderfolgende Zeilen in der Ausgabe zu trennen | x7F oder t können verwendet werden, der Standard ist -- | -c, --count | Nur übereinstimmende Zeilen anzeigen | Wenn ripgrep nur eine Datei übergeben wird, wird nur die Anzahl der übereinstimmenden Zeilen ausgedruckt. | | | Sie können --with-filename verwenden, um das Drucken des Dateinamens zu erzwingen. | | | Dies überschreibt die Option --count-matches. | --count-matches | Nur die Anzahl der Übereinstimmungen anzeigen | Mit --with-file können Sie die Ausgabe des Dateinamens erzwingen, wenn nur eine Datei vorhanden ist. | --debuggen | Debuginformationen anzeigen | | --dfa-size-limit <ZAHL+SUFFIX?> | Die Obergrenze des Regex-DFA beträgt standardmäßig 10 M. | | -E, --encoding <KODIERUNG> | Beschreibung Textkodierung, Standard ist automatisch | https://encoding.spec.whatwg.org/#concept-encoding-get | -f, --file <MUSTERDATEI>… | Muster aus Datei lesen, ein Muster pro Zeile | Kann mehrfach oder in Kombination mit -e verwendet werden, sodass jede Kombination übereinstimmt | --files | Alle zu durchsuchenden Dateien drucken | Verwendung mit rg <options> --files [PATH...] , ohne Muster | -l, --files-with-matches | Drucken Sie nur die Dateinamen, die übereinstimmen | --files-without-match überschreiben | --Dateien ohne Übereinstimmung | Drucken Sie nur die Dateinamen, die nicht übereinstimmen | --file-with-matches überschreiben | -F, --fixed-strings | Muster als normalen Text und nicht als regulären Ausdruck behandeln | Diese Option kann mit --no-fixed-strings deaktiviert werden. | -L, --follow | Sucht rekursiv nach Links, standardmäßig geschlossen | Sie können --no-follow verwenden, um es auszuschalten | -g, --glob <GLOB>… | Platzhalterdateien oder -ordner können mit ! negiert werden. | Kann mehrfach verwendet werden, entspricht den Platzhalterregeln von .gitignore | -h, --help | Hilfeinformationen drucken | | --Überschrift | Drucken Sie den Dateinamen über dem passenden Inhalt statt in der gleichen Zeile | Dies ist das Standardverhalten und kann mit --no-heading deaktiviert werden. | --versteckt | Suche nach versteckten Dateien und Ordnern | Wird standardmäßig ignoriert, kann mit --no-hidden deaktiviert werden | --iglob <GLOB>… | Dasselbe wie --glob, aber ohne Berücksichtigung der Groß-/Kleinschreibung | | -i, --ignore-case | Das Muster berücksichtigt keine Groß-/Kleinschreibung | Diese Option kann durch -s/--case-sensitive oder -S/--smart-case überschrieben werden. | --ignore-file <PFAD>… | Pfade ignorieren, das Format ist das gleiche wie .gitignore, mehrere Pfade sind zulässig | Wenn mehrere --ignore-file-Tags vorhanden sind, hat der letzte Vorrang. | | Verwenden Sie im Befehl -g, um den gleichen Effekt zu erzielen | | -v, --invert-match | Umgekehrtes Match | | -n, --line-number | Dateizeilennummer anzeigen, standardmäßig öffnen | | -x, --line-regexp | Nur Zeilen anzeigen, die vollständig mit dem Muster übereinstimmen | Wird --word-regexp überschreiben | -M, --max-columns <ANZAHL> | Keine übereinstimmenden Zeilen mit mehr als <NUM> Spalten drucken | | -m, --max-count <ZAHL> | Beschränken Sie eine Datei auf maximal <NUM> Zeilen. | | --max-depth <ZAHL> | Begrenzen Sie die Tiefe rekursiver Ordnersuchen | rg --max-depth 0 dir/ Keine Suche durchführen | --max-filesize <ZAHL+SUFFIX?> | Ignoriere Dateien, die größer sind als <NUM> Bytes | Suffix kann K, M, G sein, der Standard ist Byte | --mmap | Versuchen Sie, Speicherzuordnungen zu verwenden, Standardverhalten | Derzeit werden nicht alle Optionen unterstützt. Verwenden Sie --no-mmap, um die Option zu deaktivieren. | --no-config | Lies keine Konfigurationsdateien, ignoriere RIPGREP_CONFIG_PATH | | --no-filename | Keine übereinstimmenden Dateinamen drucken | | --keine Überschrift | Drucken Sie den Dateinamen vor jeder übereinstimmenden Zeile. | | --nicht ignorieren | Ignorierdateien abbrechen, z. B. .gitignore, .ignore | Kann mit --ignore deaktiviert werden. | --no-ignore-global | Lesen der globalen Ignorierdatei abbrechen | Beispiel: $HOME/.config/git/ignore | --no-ignore-messages | Parsing-Fehler im Zusammenhang mit .ignore- und .gitignore-Dateien abbrechen | Kann mit --ignore-messages deaktiviert werden | --kein-Ignorieren-übergeordnetes Element | Liest keine .gitignore- und .ignore-Dateien in übergeordneten Ordnern | Kann mit --ignore-parent deaktiviert werden. | --no-ignore-vcs | Nur die Catch-All-Datei .ignore | Kann mit --ignore-vcs deaktiviert werden. | -N, --no-line-number | Keine übereinstimmenden Zeilennummern drucken | | --keine-Nachrichten | Drucken Sie keine Fehler im Zusammenhang mit dem Öffnen und Lesen von Dateien | | -0, --null | Fügen Sie nach dem gedruckten Dateipfad ein NUL-Zeichen hinzu | Sehr nützlich für xargs | -o, --only-matching | Drucken Sie nur den übereinstimmenden Inhalt, nicht die gesamte Zeile | | --passthru | Übereinstimmende und nicht übereinstimmende Zeilen drucken | | --path-separator <TRENNZEICHEN> | Pfadtrennzeichen, Standard ist / unter Linux | | --pre <BEFEHL> | Verarbeiten Sie die Datei mit <COMMAND> und übergeben Sie das Ergebnis an rg | Es kann zu erheblichen Leistungseinbußen kommen | | Zum Beispiel | | | Fall "$1" in | | | *.pdf) | | | Exec pdftotext "$1" - | | | ;; | | | *) | | | Fall $(Datei "$1") in | | | _Zstandard_) | | | Führen Sie den Befehl pzstd -cdq aus. | | | ;; | | | *) | | | Exec-Katze | | | ;; | | | esac | | | ;; | | | esac | | -p, --pretty | --color always --heading --line-number | | -q, --quiet | Nicht auf Standardausgabe drucken, wenn eine Übereinstimmung gefunden wird, rg stoppen | Dies ist nützlich, wenn rg im Exit-Code verwendet wird. | --regex-size-limit <ZAHL+SUFFIX?> | Obergrenze des kompilierten regulären Ausdrucks | | -e, --regexp <MUSTER>… | Verwenden Sie reguläre Ausdrücke zum Abgleichen | Diese Option kann mehrfach verwendet werden, um Zeilen zu drucken, die einem beliebigen Muster entsprechen. | | | Kann verwendet werden, um nach Mustern zu suchen, die mit - beginnen, wie etwa rg -e -foo | -r, --replace <ERSATZTEXT> | Drucken Sie den passenden Inhalt mit der zugehörigen Datei aus | Die Gruppennummer ($5) kann verwendet werden | -z, --search-zip | Suche in den Dateitypen gz, bz2, xz, lzma, lz4 | Kann mit --no-search-zip deaktiviert werden | -S, --smart-case | Wenn alles in Kleinbuchstaben geschrieben ist, wird die Groß-/Kleinschreibung nicht beachtet, andernfalls wird die Groß-/Kleinschreibung beachtet. | Kann mit -s/--case-sensitive und -i/--ignore-case deaktiviert werden. | --sort-files | Sortieren Sie die Ausgabeergebnisse nach Dateipfad | Schaltet parallele Suchthreads ab | --Statistiken | Drucken Sie die statistischen Ergebnisse aus | | -a, --text | Suchen nach Binärdateien | Kann mit --no-text deaktiviert werden | -j, --threads <ZAHL> | Ungefähre Anzahl der verwendeten Threads | | -t, --type <TYP>… | Nur nach bestimmten Dateitypen suchen | Sie können --type-lsit verwenden, um unterstützte Dateitypen aufzulisten. | --type-add <TYPSPEZIFIKATION>… | Hinzufügen eines Dateityps | Zum Beispiel rg --type-add 'foo:*.foo' -tfoo PATTERN | | Kann auch verwendet werden, um eine Regel zu erstellen, die mehrere Dateitypen umfasst | --type-add 'quelle:include:cpp,py,md' | --type-clear <TYP>… | Standarddateitypen löschen | | --Typliste | Alle integrierten Dateitypen auflisten | | -T, --type-not <TYP>… | Nicht nach einem bestimmten Dateityp suchen | | -u, --unrestricted | -u sucht nach Dateien in .gitignore, -uu sucht nach versteckten Dateien | -uuu Suche nach Binärdateien | -V, --version | Informationen zur Druckversion | | --vimgrep | Eine Zeile pro Übereinstimmung drucken | Wenn in einer Zeile mehrere Übereinstimmungen vorhanden sind, werden mehrere Zeilen gedruckt. | -H, --with-filename | Übereinstimmende Dateipfade drucken, Standard | Kann mit --no-filename deaktiviert werden | -w, --word-regexp | Stimmt mit dem Muster als einzelnes Wort überein, entspricht < > | |
Beispielanzeige Beispiel 1 
Beispiel 2 Suche nach Inhalten, bei denen Name ein unabhängiges Wort ist (-w), entspricht <pattern> 
Beispiel 3 Nur Dateinamen mit übereinstimmendem Inhalt drucken (-l)
$ rg -w 'Name' ./ -l
src/cpp/epoll_server.cpp
src/cpp/uart_xtor.cpp Beispiel 4 Suche nur nach cpp-Dateien (-t), mit -T kannst du bestimmte Dateitypen ausschließen 
Beispiel 5 Normale Suche (-e)
$ rg -e "sa.*port" ./ -tcpp 
Beispiel 6 Anzeige des passenden Inhalts und zwei Zeilen darüber und darunter (-C), ähnlich wie bei -A/-B
$ rg -e "sa.*port" ./ -tcpp -C2 
Beispiel 7 Zeilen ohne „debug“ anzeigen (-v) Beispiel 8 Nur passende Teile anzeigen (-o)
$ rg -e "if.*debug" ./ -tcpp -o 
Beispiel 9 Groß-/Kleinschreibung ignorieren (-i)
$ rg -ie "if.*debug" ./ -tcpp -o 
Beispiel 10 Behandeln Sie das Muster als konstantes Zeichen (-F), z. B. braucht .(){}*+ kein Escapezeichen. Wenn das zu suchende Zeichen mit - beginnt, verwenden Sie -- als Trennzeichen oder verwenden Sie rg -e "-foo" 


Beispiel 11 Alle zu durchsuchenden Dateien drucken --files 
Beispiel 12 Integrierter Ausgabe-Erkennungsdateityp
$ rg --Typliste
agda: *.agda, *.lagda
Hilfe: *.aidl
amake: *.bp, *.mk
asciidoc: *.adoc, *.asc, *.asciidoc
asm: *.S, *.asm, *.s
ats: *.ats, *.dats, *.hats, *.sats
avro: *.avdl, *.avpr, *.avsc
awk: *.awk
bazel: *.bzl, BUILD, ARBEITSBEREICH
Bitbake: *.bb, *.bbappend, *.bbclass, *.conf, *.inc
bzip2: *.bz2
c: *.H, *.c, *.cats, *.h
Kabale: *.cabal
cbor: *.cbor
Ceylon: *.ceylon
Clojure: *.clj, *.cljc, *.cljs, *.cljx
cmake: *.cmake, CMakeLists.txt
Kaffeeskript: *.coffee
Konfiguration: *.cfg, *.conf, *.config, *.ini
cpp: *.C, *.H, *.cc, *.cpp, *.cxx, *.h, *.hh, *.hpp, *.hxx, *.inl
Kreolisch: *.creole
crystal: *.cr, Projektdatei
Datei: *.cs
csharp: *.cs
Datei: *.cshtml
CSS: *.css, *.scss
Datei: *.csv
Cython: *.pyx
d: *.d
Pfeil: *.dart
dhall: *.dhall
Docker: *Dockerdatei*
elisp: *.el
Elixier: *.eex, *.ex, *.exs
Ulme: *.elm
erlang: *.erl, *.hrl
fidl: *.fidl
Fisch: *.fish
Fortran: *.F, *.F77, *.F90, *.F95, *.f, *.f77, *.f90, *.f95, *.pfo
fsharp: *.fs, *.fsi, *.fsx
gn: *.gn, *.gni
gehen: *.gehen
groovy: *.gradle, *.groovy
gzip: *.gz
h: *.h, *.hpp
haskell: *.c2hs, *.cpphs, *.hs, *.hsc, *.lhs
hbs: *.hbs
hs: *.hs, *.lhs
html: *.ejs, *.htm, *.html
idris: *.idr, *.lidr
java: *.java, *.jsp
jinja: *.j2, *.jinja, *.jinja2
jl: *.jl
Dateiendung js: *.js, *.jsx, *.vue
json: *.json, Komponist.lock
jsonl: *.jsonl
julia: *.jl
jupyter: *.ipynb, *.jpynb
kotlin: *.kt, *.kts
weniger: *.less
Lizenz:* ]*, LGPL-*[0-9]*, Lizenz [CS] E, Lizenz [CS] E [.-]*, MIT-*[0-9]*, MPL-*[0-9]*, Beachten Sie [.-]*, Ofl-*[0-9]*, Patents, Patents [.-]*. -]*, lgpl [.-]*, licen [cs] e, licen [cs] e.*
lisp: *.el, *.jl, *.lisp, *.lsp, *.sc, *.scm
Protokoll: *.log
lua: *.lua
lz4: *.lz4
lzma: *.lzma
m4: *.ac, *.m4
erstellen: *.mak, *.mk, GNUmakefile, Gnumakefile, Makefile, gnumakefile, makefile
Mann: *.[0-9][cEFMmpSx], *.[0-9lnpx]
Markdown: *.markdown, *.md, *.mdown, *.mkdn
matlab: *.m
md: *.markdown, *.md, *.mdown, *.mkdn
mk: mk-Datei
ml: *.ml
msbuild: *.csproj, *.fsproj, *.proj, *.props, *.targets, *.vcxproj
nim: *.nim
nix: *.nix
Objekt: *.h, *.m
objcpp: *.h, *.mm
ocaml: *.ml, *.mli, *.mll, *.mly
org: *.org
pdf: *.pdf
perl: *.PL, *.perl, *.pl, *.plh, *.plx, *.pm, *.t
php: *.php, *.php3, *.php4, *.php5, *.phtml
Pod: *.pod
protobuf: *.proto
ps: *.cdxml, *.ps1, *.ps1xml, *.psd1, *.psm1
Puppe: *.erb, *.pp, *.rb
purs: *.purs
py: *.py
qmake: *.prf, *.pri, *.pro
r: *.R, *.Rmd, *.Rnw, *.r
Datei: *.rdoc
Liesmich: *LESEMICH, LESEME*
erste: *.rst
Ruby: *.gemspec, *.rb, .irbrc, Gemfile, Rakefile
Rost: *.rs
sass: *.sass, *.scss
scala: *.sbt, *.scala
sh: *.bash, *.bashrc, *.csh, *.cshrc, *.ksh, *.kshrc, *.sh, *.tcsh, *.zsh, .bash_login, .bash_logout, .bash_profile, .bashrc, .cshrc, .kshrc, .login, .logout, .profile, .tcshrc, .zlogin, .zlogout, .zprofile, .zshenv, .zshrc, bash_login, bash_logout, bash_profile, bashrc, Profil, zlogin, zlogout, zprofile, zshenv, zshrc
Smarty: *.tpl
sml: *.sig, *.sml
Soja: *.soy
Funke: *.spark
SQL: *.psql, *.sql
Stift: *.styl
sv: *.h, *.sv, *.svh, *.v, *.vg
svg: *.svg
schnell: *.swift
Schluck: *.def, *.i
systemd: *.automount, *.conf, *.device, *.link, *.mount, *.path, *.scope, *.service, *.slice, *.socket, *.swap, *.target, *.timer
Aufgabenpapier: *.taskpaper
tcl: *.tcl
tex: *.bib, *.cls, *.ltx, *.sty, *.tex
Textil: *.textile
tf: *.tf
toml: *.toml, Fracht.lock
ts: *.ts, *.tsx
Zweig: *.twig
txt: *.txt
Wert: *.vala
vb: *.vb
verilog: *.sv, *.svh, *.v, *.vh
vhdl: *.vhd, *.vhdl
vim: *.vim
vimscript: *.vim
webidl: *.idl, *.webidl, *.widl
Wiki: *.mediawiki, *.wiki
xml: *.xml, *.xml.dist
xz: *.xz
yacc: *.y
yaml: *.yaml, *.yml
zsh: *.zsh, .zlogin, .zlogout, .zprofile, .zshenv, .zshrc, zlogin, zlogout, zprofile, zshenv, zshrc Zusammenfassen Die Suchgeschwindigkeit von Ripgrep ist wirklich schnell, was mir beim Durchsuchen von Code sehr hilft. Ich bin davon überzeugt, dass es für jeden Programmierer von unendlichem Wert ist, insbesondere in Kombination mit FZF. Die einzige Schwäche ist die Unterstützung für reguläre Ausdrücke, aber das ist ein Kompromiss. Wenn eine Bibliothek wie PCRE verwendet wird, wird die Geschwindigkeit definitiv stark beeinträchtigt. Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.
Das könnte Sie auch interessieren:- Probleme mit dem Ladepfad und Suchpfad der Dynamic Link Library unter Linux
- Detaillierte Beispiele für Dateisuchbefehle unter Linux
- Der Unterschied zwischen Linux-Befehlssuchbefehlen whereis und which
- Befehl „Dateien suchen“ in Linux
- Einführung in die Linux-Dateisuche und andere grundlegende Befehle (3)
- Verwenden Sie reguläre Ausdrücke in Linux, um flexibel nach Text in Dateien zu suchen
- So zeigen Sie das Verhalten von Suchmaschinen-Spider-Crawlern in Linux/Nginx an
|