[ LISEZMOI | Guide de l'utilisateur | Indexation | Repères | Questions et réponses ]
l'option -Q ouvre une requête TUI pour rechercher des fichiers pendant que vous tapez !
ugrep est rapide, convivial et équipé d'une tonne de nouvelles fonctionnalités que les utilisateurs souhaitaient
comprend une interface utilisateur interactive avec aide intégrée, une recherche de type Google avec des modèles AND/OR/NOT, une recherche floue, une recherche (imbriquée) d'archives zip/7z/tar/pax/cpio, des archives tar et des fichiers compressés gz/Z/bz/ bz2/lzma/xz/lz4/zstd/brotli, recherche et vidage hexadécimal de fichiers binaires, recherche de documents tels que PDF, doc, docx et sortie au format JSON, XML, CSV ou votre propre format personnalisé
Syntaxe de modèle d'expression régulière étendue Unicode avec correspondance de modèle sur plusieurs lignes sans nécessiter d'options de ligne de commande spéciales
comprend un indexeur de fichiers pour accélérer la recherche des systèmes de fichiers lents et froids
un véritable remplacement instantané pour GNU grep (en supposant que vous copiez ou créez un lien symbolique ug
vers grep
, et vers egrep
et vers fgrep
), contrairement à d'autres grep populaires prétendant être des "alternatives à grep" ou des "remplacements" alors que ceux-ci implémentent en fait une ligne de commande incompatible options et utilisez un matcher de regex incompatible, c'est-à-dire regex Perl uniquement par rapport à POSIX BRE (grep) et ERE (egrep) lorsque ugrep prend en charge tous les modes regex
les benchmarks montrent que ugrep est (l'un des) le grep le plus rapide utilisant le matcher d'expressions régulières hautes performances basé sur DFA RE/flex
si quelque chose doit être amélioré ou ajouté à ugrep, faites-le-moi savoir !
La priorité n°1 est l'assurance qualité pour continuer à garantir qu'ugrep ne contient aucun bug et est fiable.
rendre ugrep encore plus rapide, voir par exemple #432, #421
partager des résultats de performance reproductibles
ug
est destiné à une utilisation interactive, qui charge un fichier de configuration .ugrep facultatif avec vos préférences situé dans le répertoire de travail ou le répertoire personnel, ug+
recherche également les fichiers PDF, les documents, les livres électroniques et les métadonnées d'images.
ugrep
pour une utilisation par lots comme GNU grep sans fichier de configuration .ugrep, ugrep+
recherche également les fichiers PDF, les documents, les livres électroniques et les métadonnées d'images
Correspond aux modèles Unicode par défaut et recherche automatiquement les fichiers codés UTF-8, UTF-16 et UTF-32
Correspond à plusieurs lignes avec n
ou R
dans les modèles d'expression régulière, aucune option spéciale n'est requise pour ce faire !
Aide intégrée : ug --help
, où ug --help WHAT
affiche les options liées à WHAT
vous recherchez
ug --help regex
, ug --help globs
, ug --help fuzzy
, ug --help format
.
Convivial avec des fichiers de configuration personnalisables utilisés par la commande ug
destinée à une utilisation interactive qui charge un fichier de configuration .ugrep avec vos préférences
ug PATTERN ... ugrep --config PATTERN ...
ug --save-config ...options-you-want-to-save...
enregistre un fichier de configuration .ugrep dans le répertoire de travail afin que la prochaine fois que vous y exécuterez ug
, il utilise ces options. Faites cela dans votre répertoire personnel pour enregistrer un fichier de configuration .ugrep avec les options que vous souhaitez généralement utiliser.
TUI de requête interactif, appuyez sur F1 ou CTRL-Z pour obtenir de l'aide et TAB/SHIFT-TAB pour accéder aux répertoires et aux fichiers.
ug -Q ug -Q -e PATTERN
-Q
remplace PATTERN
sur la ligne de commande pour vous permettre de saisir des modèles de manière interactive dans la TUI. Dans la TUI, utilisez les touches ALT+lettre pour activer/désactiver les courtes « options de lettres », par exemple ALT-n (option -n
) pour afficher/masquer les numéros de ligne.
Rechercher le contenu des archives (zip, tar, pax, jar, cpio, 7z) et des fichiers compressés (gz, Z, bz, bz2, lzma, xz, lz4, zstd, brotli)
ug -z PATTERN ... ug -z --zmax=2 PATTERN ...
spécifiez -z --zmax=2
pour rechercher des fichiers compressés et des archives imbriquées dans des archives. L'argument --zmax
peut aller de 1 (par défaut) à 99 pour un maximum de 99 étapes de décompression et de désarchivage pour rechercher des archives imbriquées
Effectuez une recherche avec des modèles de requête booléenne de type Google en utilisant des modèles -%
avec AND
(ou juste un espace), OR
(ou une barre |
), NOT
(ou un tiret -
), en utilisant des guillemets pour correspondre exactement et en regroupant avec ( )
(affiché sur le côté gauche en bas); ou avec les options -e
(comme "ou"), --and
, --andnot
et --not
modèles d'expression régulière (affichés sur le côté droit ci-dessous) :
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' ...
où A
, B
et C
sont des modèles d'expression régulière arbitraires (utilisez l'option -F
pour rechercher des chaînes)
spécifiez l'option -%%
( --bool --files
) pour appliquer la requête booléenne aux fichiers dans leur ensemble : un fichier correspond si toutes les conditions booléennes sont satisfaites en faisant correspondre les modèles à l'échelle du fichier. Sinon, les conditions booléennes s'appliquent par défaut à des lignes uniques, car les utilitaires grep sont généralement des filtres de modèles basés sur des lignes. L'option --stats
affiche la requête sous une forme lisible par l'homme une fois la recherche terminée.
Recherchez des fichiers PDF, doc, docx, e-book et plus encore avec ug+
en utilisant les filtres associés aux extensions de nom de fichier :
ug+ PATTERN ...
ou spécifiez --filter
avec un type de fichier pour utiliser un utilitaire de filtrage :
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 ...
la commande ug+
est la même que la commande ug
, mais utilise également des filtres pour rechercher des PDF, des documents et des métadonnées d'image
Affichez le contexte horizontal avec l'option -o
( --only-matching
) et les options de contexte -ABC
, par exemple pour rechercher des correspondances dans de très longues lignes, telles que les sources Javascript et JSON :
ug -o -C20 -nk PATTERN longlines.js
-o -C20
correspond à toutes les correspondances avec un contexte de 20 caractères avant et 20 caractères après une correspondance (soit 40 caractères Unicode au total), -nk
affiche les numéros de ligne et de colonne.
Trouvez des correspondances de modèles approximatives avec une recherche floue, dans la distance de Levenshtein spécifiée
ug -Z PATTERN ... ug -Z3 PATTTERN ...
-Zn
correspond à n
caractères supplémentaires, manquants ou remplacés, -Z+n
correspond à n
caractères supplémentaires, -Zn
correspond à n
caractères manquants et -Z~n
correspond à n
caractères remplacés. -Z
est par défaut -Z1
.
Recherche de type Fzf avec regex (ou chaînes fixes avec -F
), correspondance floue avec jusqu'à 4 caractères supplémentaires avec -Z+4
et mots uniquement avec -w
, en utilisant -%%
pour les recherches booléennes à l'échelle du fichier
ug -Q -%% -l -w -Z+4 --sort=best
-l
répertorie les fichiers correspondants dans le TUI, appuyez sur TAB
puis ALT-y
pour afficher un fichier, SHIFT-TAB
et Alt-l
pour revenir en arrière et afficher la liste des fichiers correspondants classés par meilleure correspondance
Recherchez des fichiers binaires et affichez des vidages hexadécimaux avec des correspondances de modèles binaires (texte Unicode ou -U
pour les modèles d'octets)
ug --hexdump -U BYTEPATTERN ... ug --hexdump TEXTPATTERN ...
ug -X -U BYTEPATTERN ... ug -X TEXTPATTERN ...
ug -W -U BYTEPATTERN ... ug -W TEXTPATTERN ...
--hexdump=4chC1
affiche 4
colonnes hexadécimales sans colonne de caractères c
, sans espacement hexadécimal h
et avec une ligne hexadécimale supplémentaire C1
avant et après une correspondance.
Incluez les fichiers à rechercher par types de fichiers ou fichier "octets magiques" ou excluez-les avec ^
ug -t TYPE PATTERN ... ug -t ^TYPE PATTERN ...
ug -M 'MAGIC' PATTERN ... ug -M '^MAGIC' PATTERN ...
Incluez les fichiers et les répertoires à rechercher qui correspondent aux globs de style gitignore ou excluez-les avec ^
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 ...
Incluez les fichiers à rechercher par extension de nom de fichier (suffixe) ou excluez-les avec ^
, un raccourci pour -g"*.EXT"
ug -O EXT PATTERN ... ug -O ^EXT PATTERN ...
Inclure les fichiers cachés (dotfiles) et les répertoires dans lesquels rechercher (omis par défaut)
ug -. PATTERN ... ug -g'.*,.*/' PATTERN ...
spécifiez hidden
dans votre .ugrep pour toujours rechercher les fichiers cachés avec ug
.
Exclure les fichiers spécifiés par .gitignore etc.
ug --ignore-files PATTERN ... ug --ignore-files=.ignore PATTERN ...
spécifiez ignore-files
dans votre .ugrep pour toujours les ignorer avec ug
. Ajoutez ignore-files=...
supplémentaires si vous le souhaitez.
Modèles de recherche excluant les modèles négatifs (« correspond à ceci mais pas à cela »)
ug -e PATTERN -N NOTPATTERN ... ug -e '[0-9]+' -N 123 ...
Utilisez des modèles d'expression régulière prédéfinis pour rechercher du code source, javascript, XML, JSON, HTML, PHP, markdown, etc.
ug PATTERN -f c++/zap_comments -f c++/zap_strings ...
ug PATTERN -f php/zap_html ...
ug -f js/functions ... | ug PATTERN ...
Trier les fichiers correspondants par nom, meilleure correspondance, taille et heure
ug --sort PATTERN ... ug --sort=size PATTERN ...
ug --sort=changed PATTERN ... ug --sort=created PATTERN ...
ug -Z --sort=best PATTERN ... ug --no-sort PATTERN ...
Résultats de sortie aux formats CSV, JSON, XML et spécifiés par l'utilisateur
ug --csv PATTERN ... ug --json PATTERN ...
ug --xml PATTERN ... ug --format='file=%f line=%n match=%O%~' PATTERN ...
ug --help format
affiche l'aide sur les champs de format %
pour une sortie personnalisée.
Recherchez avec les modèles d'expression régulière compatibles Perl de PCRE et affichez ou remplacez les correspondances de sous-modèles.
ug -P PATTERN ... ug -P --format='%1 and %2%~' 'PATTERN(SUB1)(SUB2)' ...
Remplacez les modèles dans la sortie par -P et --replace le texte de remplacement, contenant éventuellement des champs de formatage %
, en utilisant -y
pour transmettre le reste du fichier :
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
affiche l'aide sur les champs de format %
à utiliser éventuellement avec --replace
.
Recherchez des fichiers avec un format d'encodage spécifique tel que ISO-8859-1 à 16, CP 437, CP 850, MACROMAN, KOI8, etc.
ug --encoding=LATIN1 PATTERN ...
Installez la dernière version d'ugrep avec Homebrew :
$ brew install ugrep
ou installez avec MacPorts :
$ sudo port install ugrep
Cela installe les commandes ugrep
et ug
, où ug
est identique à ugrep
mais charge également le fichier de configuration .ugrep lorsqu'il est présent dans le répertoire de travail ou le répertoire personnel.
Installer avec Winget winget install Genivia.ugrep
Ou installez avec Chocolatey choco install ugrep
Ou installez avec Scoop scoop install ugrep
Ou téléchargez l'exécutable ugrep.exe
complet en tant qu'artefact de version à partir de https://github.com/Genivia/ugrep/releases. La version compressée contient le binaire principal ugrep.exe
ainsi que ug.exe
. La commande ug
, destinée à une utilisation interactive, charge et lit les paramètres du fichier de configuration .ugrep
(lorsqu'il est présent dans le répertoire de travail ou le répertoire personnel).
Ajoutez ugrep.exe
et ug.exe
à votre chemin d'exécution : accédez à Paramètres et recherchez "Chemin" dans Rechercher un paramètre . Sélectionnez les variables d'environnement -> Chemin -> Nouveau et ajoutez le répertoire dans lequel vous avez placé les exécutables ugrep.exe
et ug.exe
.
Conseil
Conseils pratiques sur l'utilisation ugrep.exe
et ug.exe
sur la ligne de commande Windows :
'
mais utilisez plutôt "
; la plupart des utilitaires de commande Windows considèrent les guillemets simples '
comme faisant partie de l'argument de ligne de commande !-g/GLOB
au lieu des arguments de ligne de commande GLOB
habituels pour sélectionner les fichiers et répertoires à rechercher, en particulier pour les recherches récursives ;""
pour correspondre à toutes les entrées, cela peut être ignoré par certains interpréteurs de commandes Windows tels que Powershell, dans ce cas, vous devez spécifier l'option --match
à la place ;R
au lieu de n
pour faire correspondre toutes les nouvelles lignes Unicode, telles que les paires rn
et les simples r
et n
. $ apk add ugrep ugrep-doc
Vérifiez https://pkgs.alpinelinux.org/packages?name=ugrep pour les informations sur la version.
$ pacman -S ugrep
Vérifiez https://archlinux.org/packages/extra/x86_64/ugrep pour les informations sur la version.
Activez d’abord le référentiel EPEL, puis vous pourrez installer ugrep.
$ dnf install ugrep
Vérifiez https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ pour les informations sur la version.
$ apt-get install ugrep
Vérifiez https://packages.debian.org/ugrep pour les informations sur la version. Pour créer et essayer ugrep
localement, consultez les étapes de construction « Toutes les plates-formes » plus loin ci-dessous.
$ dnf install ugrep
Vérifiez https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ pour les informations sur la version.
$ pkg install ugrep
Vérifiez https://www.freshports.org/textproc/ugrep pour les informations sur la version.
$ pkgman install cmd:ugrep
Vérifiez https://github.com/haikuports/haikuports/tree/master/app-text/ugrep pour les informations sur la version. Pour créer et essayer ugrep
localement, consultez les étapes de construction « Toutes les plates-formes » plus loin ci-dessous.
Vous pouvez utiliser le programme d'installation du package NetBSD standard (pkgsrc) : http://cdn.netbsd.org/pub/pkgsrc/current/pkgsrc/textproc/ugrep/README.html
$ pkg_add ugrep
Vérifiez https://openports.pl/path/sysutils/ugrep pour les informations sur la version.
$ zypper install ugrep
Vérifiez https://build.opensuse.org/package/show/utilities/ugrep pour les informations sur la version.
Activez d’abord le référentiel EPEL, puis vous pourrez installer ugrep.
$ dnf install ugrep
Vérifiez https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ pour les informations sur la version.
Cloner ugrep
avec
$ git clone https://github.com/Genivia/ugrep
Ou visitez https://github.com/Genivia/ugrep/releases pour télécharger une version spécifique.
Vous pourrez toujours les ajouter plus tard, lorsque vous aurez besoin de ces fonctionnalités :
L'option -P
(expressions régulières Perl) nécessite soit la bibliothèque PCRE2 (recommandée), soit la bibliothèque Boost.Regex (repli facultatif). Si PCRE2 n'est pas installé, installez PCRE2 avec par exemple sudo apt-get install -y libpcre2-dev
ou téléchargez PCRE2 et suivez les instructions d'installation. Vous pouvez également télécharger Boost.Regex et exécuter ./bootstrap.sh
et sudo ./b2 --with-regex install
. Voir Boost : pour commencer.
L'option -z
(recherche de fichiers et d'archives compressés) nécessite l'installation de la bibliothèque zlib. Il est installé sur la plupart des systèmes. Sinon, installez-le, par exemple avec sudo apt-get install -y libz-dev
. Pour rechercher les fichiers .bz
et .bz2
, installez la bibliothèque bzip2 (recommandée), par exemple avec sudo apt-get install -y libbz2-dev
. Pour rechercher les fichiers .lzma
et .xz
, installez la bibliothèque lzma (recommandée), par exemple avec sudo apt-get install -y liblzma-dev
. Pour rechercher des fichiers .lz4
, installez la bibliothèque lz4 (facultatif, non obligatoire), par exemple avec sudo apt-get install -y liblz4-dev
. Pour rechercher des fichiers .zst
, installez la bibliothèque zstd (facultatif, non obligatoire), par exemple avec sudo apt-get install -y libzstd-dev
. Pour rechercher des fichiers .br
, installez la bibliothèque brotli (facultatif, non obligatoire), par exemple avec sudo apt-get install -y libbrotli-dev
. Pour rechercher des fichiers .bz3
, installez la bibliothèque bzip3 (facultatif, non obligatoire), par exemple avec sudo apt-get install -y bzip3
.
Conseil
Même si votre système dispose d'utilitaires de ligne de commande, tels que bzip2
, cela ne signifie pas nécessairement que les bibliothèques de développement telles que libbz2
sont installées. Les bibliothèques de développement doivent être installées.
Certains systèmes Linux peuvent ne pas être configurés pour charger des bibliothèques dynamiques à partir de /usr/local/lib
, provoquant une erreur de chargement de bibliothèque lors de l'exécution ugrep
. Pour corriger cela, ajoutez export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
à votre fichier ~/.bashrc
. Ou exécutez sudo ldconfig /usr/local/lib
.
Exécutez le script ./build.sh
pour construire ugrep
:
$ cd ugrep
$ ./build.sh
Cela construit l'exécutable ugrep
dans le répertoire ugrep/src
avec ./configure
et make -j
, vérifié avec make test
. Lorsque tous les tests réussissent, l'exécutable ugrep
est copié dans ugrep/bin/ugrep
et le lien symbolique ugrep/bin/ug -> ugrep/bin/ugrep
est ajouté pour la commande ug
.
Notez que ug
est identique à ugrep
mais charge également le fichier de configuration .ugrep lorsqu'il est présent dans le répertoire de travail ou le répertoire personnel. Cela signifie que vous pouvez définir vos options par défaut pour ug
dans .ugrep.
Des chemins alternatifs vers les bibliothèques installées ou locales peuvent être spécifiés avec ./build.sh
. Pour obtenir de l'aide sur les options de build disponibles :
$ ./build.sh --help
Vous pouvez créer des exécutables statiques en spécifiant :
$ ./build.sh --enable-static
Cela peut échouer si les bibliothèques ne sont pas liées de manière statique, comme brotli. Dans ce cas, essayez ./build.sh --enable-static --without-brotli
.
Vous pouvez créer ugrep
avec les valeurs par défaut personnalisées activées, comme un pager :
$ ./build.sh --enable-pager
Les options permettant de sélectionner les valeurs par défaut pour les builds incluent :
--help
afficher les options de construction--enable-static
construire des exécutables statiques, si possible--enable-hidden
recherche toujours les fichiers et répertoires cachés--enable-pager
utilise toujours un pager pour afficher la sortie sur les terminaux--enable-pretty
colorise la sortie vers les terminaux et ajoute des en-têtes de nom de fichier--disable-auto-color
désactive les couleurs automatiques, nécessite l'option ugrep --color=auto
pour afficher les couleurs--disable-mmap
désactive les fichiers mappés en mémoire--disable-sse2
désactive les optimisations SSE2 et AVX--disable-avx2
désactive les optimisations AVX2 et AVX512BW, mais compile avec SSE2 lorsqu'il est pris en charge--disable-neon
désactiver les optimisations ARM NEON/AArch64--with-grep-path
le chemin -f
par défaut si GREP_PATH
n'est pas défini--with-grep-colors
les couleurs par défaut si GREP_COLORS
n'est pas défini Une fois la construction terminée, copiez ugrep/bin/ugrep
et ugrep/bin/ug
dans un emplacement pratique, par exemple dans votre répertoire ~/bin
. Ou, si vous souhaitez installer les commandes et les pages de manuel ugrep
et ug
:
$ sudo make install
Cela installe également les fichiers de modèles avec des modèles prédéfinis pour l'option -f
dans /usr/local/share/ugrep/patterns/
. L'option -f
vérifie d'abord la présence de fichiers de signatures dans le répertoire de travail, s'il n'est pas trouvé, vérifie la variable d'environnement GREP_PATH
pour charger les fichiers de signatures, et si elle n'est pas trouvée, lit les fichiers de signatures prédéfinis installés.
Malheureusement, les clones git ne préservent pas les horodatages, ce qui signifie que vous pouvez rencontrer le message "AVERTISSEMENT : 'aclocal-1.15' est manquant sur votre système." ou cet en-tête automatique n'a pas été trouvé lors de l'exécution make
.
Pour contourner ce problème, exécutez :
$ autoreconf -fi
$ ./build.sh
GCC 8 et versions ultérieures peuvent produire des avertissements du type "remarque : paramètre passant pour l'argument ... modifié dans GCC 7.1" . Ces avertissements doivent être ignorés.
Un Dockerfile est inclus pour créer ugrep
dans un conteneur Ubuntu.
Les développeurs peuvent souhaiter utiliser des désinfectants pour vérifier le code ugrep lors de modifications importantes, par exemple pour détecter des courses de données avec ThreadSanitizer :
$ ./build.sh CXXFLAGS='-fsanitize=thread -O1 -g'
Nous avons vérifié ugrep
avec les clang AddressSanitizer, MemorySanitizer, ThreadSanitizer et UndefinedBehaviorSanitizer. Ces options entraînent une surcharge d'exécution importante et ne doivent pas être utilisées pour la version finale.
? Retour à la table des matières
Veuillez noter que les commandes ugrep et ug recherchent les fichiers binaires par défaut et n'ignorent pas les fichiers spécifiés par .gitignore, ce qui ne rendra pas les comparaisons de performances de recherche récursives significatives à moins que les options -I
et --ignore-files
ne soient utilisées. Pour définir ces options par défaut pour ug , ajoutez simplement les fichiers ignore-binary
et ignore-files
à votre fichier de configuration .ugrep.
Pour une comparaison à jour des performances du dernier ugrep, veuillez consulter les tests de performances de l'ugrep. Ugrep est plus rapide que GNU grep, Silver Searcher, ack, sift. La vitesse d'Ugrep bat celle de ripgrep dans la plupart des benchmarks.
Tout d'abord, définissons la commande :grep
dans Vim pour rechercher des fichiers de manière récursive. Pour ce faire, ajoutez les lignes suivantes à votre .vimrc
situé dans le répertoire racine :
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
Ceci spécifie -j
les recherches insensibles à la casse avec la commande Vim :grep
. Pour les recherches sensibles à la casse, supprimez -j
de grepprg
. Plusieurs correspondances sur la même ligne sont répertoriées séparément dans la fenêtre du correctif rapide. Si cela n'est pas souhaité, supprimez -u
de grepprg
. Avec ce changement, seule la première correspondance d'une ligne est affichée. L'option --ignore-files
ignore les fichiers spécifiés dans les fichiers .gitignore
, lorsqu'ils sont présents. Pour limiter la profondeur des recherches récursives au répertoire actuel uniquement, ajoutez -1
à grepprg
.
Vous pouvez maintenant appeler la commande Vim :grep
dans Vim pour rechercher des fichiers sur un PATH
spécifié pour les correspondances PATTERN
:
:grep PATTERN [PATH]
Si vous omettez PATH
, le répertoire de travail est recherché. Utilisez %
comme PATH
pour rechercher uniquement le fichier actuellement ouvert dans Vim :
:grep PATTERN %
La commande :grep
affiche les résultats dans une fenêtre de correctif rapide qui vous permet d'accéder rapidement aux correspondances trouvées.
Pour ouvrir une fenêtre de correctif rapide avec la dernière liste de correspondances :
:copen
Double-cliquez sur une ligne dans cette fenêtre (ou sélectionnez une ligne et appuyez sur ENTRÉE) pour accéder au fichier et à l'emplacement dans le fichier de la correspondance. Entrez les commandes :cn
et :cp
pour passer respectivement à la correspondance suivante ou précédente. Pour mettre à jour les résultats de la recherche dans la fenêtre du correctif rapide, saisissez-les simplement. Par exemple, pour rechercher de manière récursive le code source C++ marqué FIXME
dans le répertoire de travail :
:grep -tc++ FIXME
Pour fermer la fenêtre du correctif rapide :
:cclose
Vous pouvez utiliser les options ugrep avec la commande :grep
, par exemple pour sélectionner des commentaires sur une ou plusieurs lignes dans le fichier actuel :
:grep -f c++/comments %
Seule la première ligne d'un commentaire multiligne est affichée dans le correctif rapide, pour économiser de l'espace. Pour afficher toutes les lignes d'une correspondance multiligne, supprimez %-G
de grepformat
.
Un outil Vim populaire est ctrlp.vim, qui est installé avec :
$ cd ~/.vim
$ git clone https://github.com/kien/ctrlp.vim.git bundle/ctrlp.vim
CtrlP utilise ugrep en ajoutant les lignes suivantes à votre .vimrc
:
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
où -I
ignore les fichiers binaires, l'option --ignore-files
ignore les fichiers spécifiés dans les fichiers .gitignore
, lorsqu'ils sont présents, et l'option -3
limite la recherche dans les répertoires à trois niveaux (le répertoire de travail et jusqu'à deux niveaux ci-dessous).
Démarrez Vim puis entrez la commande :
:helptags ~/.vim/bundle/ctrlp.vim/doc
Pour afficher la documentation CtrlP dans Vim, entrez la commande :
:help ctrlp.txt
? Retour à la table des matières
Grâce à Manuel Uberti, vous pouvez désormais utiliser ugrep dans Emacs. Pour utiliser ugrep au lieu de GNU grep dans Emacs, ajoutez la ligne suivante à votre fichier .emacs.d/init.el
:
(setq-default xref-search-program ‘ugrep)
Cela signifie que les commandes Emacs telles que project-find-regexp
qui s'appuient sur Xref peuvent désormais exploiter la puissance de ugrep .
De plus, il est possible d'utiliser grep
dans les commandes grep d'Emacs. Par exemple, vous pouvez exécuter lgrep
avec ugrep
en personnalisant grep-template
comme suit :
(setq-default grep-template "ugrep --color=always -0Iinr -e <R>")
Si vous ne disposez pas d'Emacs version 29 (ou supérieure), vous pouvez télécharger et créer Emacs à partir de la branche principale d'Emacs, ou activer manuellement l'intégration de Xref avec ugrep :
(with-eval-after-load 'xref
(push '(ugrep . "xargs -0 ugrep <C> --null -ns -e <R>")
xref-search-program-alist)
(setq-default xref-search-program 'ugrep))
? Retour à la table des matières
ugrep prêt à l'emploi prend en charge toutes les options de ligne de commande grep GNU/BSD standard et améliore également nombre d'entre elles. Pour plus de détails, consultez les améliorations notables par rapport à grep.
Si vous souhaitez vous en tenir exactement aux modèles Unicode non UTF GNU/BSD grep ASCII/LATIN1, utilisez l'option -U
pour désactiver la correspondance complète des modèles Unicode.
En fait, exécuter ugrep
avec les options -U
, -Y
, -.
et --sort
le font se comporter exactement comme egrep
, correspondant uniquement aux modèles Unicode ASCII/LATIN1 non UTF, permettant aux modèles vides de correspondre et de rechercher des fichiers cachés au lieu de les ignorer, respectivement. Voir l'équivalence grep.
Vous pouvez créer des alias grep pratiques avec ou sans options -U
, -Y
, -.
et --sort
ou inclure d'autres options comme vous le souhaitez.
Ou vous pouvez créer des exécutables grep
, egrep
et fgrep
en copiant ugrep
sous ces noms. Lorsque l'exécutable ugrep
(ou ugrep.exe
) est copié sous grep
( grep.exe
), egrep
( egrep.exe
), fgrep
( fgrep.exe
), puis option -U
, -Y
et -.
sont automatiquement activés avec -G
pour grep
, -E
pour egrep
et -F
pour fgrep
. De plus, lorsqu'elle est copiée sous zgrep
, zegrep
et zfgrep
, l'option -z
est activée. Par exemple, lorsque ugrep
est copié sous zegrep
, les options -z
, -E
, -Y
, -.
et --sort
sont activés.
De même, les liens symboliques et les liens physiques vers ugrep
fonctionnent également très bien pour créer des remplacements grep
, egrep
et fgrep
. Par exemple, pour créer un lien symbolique egrep
:
sudo ln -s `which ugrep` /opt/local/bin/egrep
Le /opt/local/bin
n'est qu'un exemple et peut ou non être dans votre $path
et peut ou non être trouvé lors de l'exécution egrep
en fonction de votre $path
.
ugrep est équivalent à GNU/BSD grep lorsque les options suivantes sont utilisées :
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
où:
-U
désactive la correspondance de modèle de caractères larges Unicode, ainsi par exemple le modèle xa3
correspond à l'octet A3 au lieu du point de code Unicode U+00A3 représenté par la séquence UTF-8 C2 A3. Par défaut dans ugrep, xa3
correspond à U+00A3. Nous ne recommandons pas d'utiliser -U
pour les recherches de modèles de texte, uniquement pour les recherches binaires ou pour rechercher des fichiers latin-1 (iso-8859-1) sans signaler ces fichiers comme binaires (depuis ugrep v3.5.0).-Y
autorise les correspondances vides, donc par exemple le modèle a*
correspond à chaque ligne au lieu d'une séquence de a
. Par défaut dans ugrep, le modèle a*
correspond à une séquence de a
. De plus, dans ugrep, le modèle a*b*c*
correspond à ce à quoi il est censé correspondre par défaut. Voir les améliorations.-.
recherche les fichiers cachés (dotfiles). Par défaut, les fichiers cachés sont ignorés, comme la plupart des utilitaires Unix.--sort
spécifie la sortie triée par nom de chemin, affichant d'abord les fichiers correspondants triés, suivis des correspondances récursives triées dans les sous-répertoires. Sinon, les fichiers correspondants sont signalés sans ordre particulier pour améliorer les performances ;-Dread
et -dread
sont les valeurs par défaut de GNU/BSD grep mais ne sont pas recommandées, voir améliorations pour une explication.? Retour à la table des matières
Alias couramment utilisés à ajouter à .bashrc
pour augmenter la productivité :
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)
? Retour à la table des matières
-Q
.n
.-U
).--bool
).--ignore-files
.-Z
.-z
.-z
.-z
et --zmax=NUM
jusqu'à NUM
niveaux de profondeur.--filter
en utilisant des utilitaires de conversion de format tiers comme plugins.-r
pour rechercher des répertoires de manière récursive.-.
).-E
comme egrep, alors que -G
active BRE).-J1
).-W
(sortie des correspondances binaires en hexadécimal avec le texte correspondant comme d'habitude) et -X
(sortie de toutes les correspondances en hexadécimal).--format
).-f
utilise la variable d'environnement GREP_PATH
ou les modèles prédéfinis installés dans /usr/local/share/ugrep/patterns
. Si -f
est spécifié et qu'un ou plusieurs modèles -e
sont également spécifiés, alors les options -F
, -x
et -w
ne s'appliquent pas aux modèles -f
. Ceci afin d'éviter toute confusion lorsque -f
est utilisé avec des modèles prédéfinis qui pourraient ne plus fonctionner correctement avec ces options.-O
, -M
et -t
spécifient respectivement les extensions de fichier, les modèles d'octets magiques de signature de fichier et les types de fichiers prédéfinis. Cela permet de rechercher certains types de fichiers dans les arborescences de répertoires, par exemple avec les options de recherche récursive -R
et -r
. Les options -O
, -M
et -t
s'appliquent également aux fichiers archivés dans les fichiers cpio, jar, pax, tar, zip et 7z.-k
, --column-number
pour afficher le numéro de colonne, en tenant compte de l'espacement des tabulations en développant les onglets, comme spécifié par l'option --tabs
.-P
(expressions régulières Perl) prend en charge les références arrière (avec --format
) et lookbehinds, qui utilise la bibliothèque PCRE2 ou Boost.Regex pour une correspondance rapide des expressions régulières Perl avec une syntaxe de type PCRE.-b
avec l'option -o
ou avec l'option -u
, ugrep affiche le décalage d'octet exact de la correspondance de modèle au lieu du décalage d'octet du début de la ligne correspondante rapporté par GNU/BSD grep.-u
, --ungroup
pour ne pas regrouper plusieurs correspondances par ligne. Cette option affiche à nouveau une ligne d'entrée correspondante pour chaque correspondance de motif supplémentaire sur la ligne. Cette option est particulièrement utile avec l'option -c
pour signaler le nombre total de correspondances de modèles par fichier au lieu du nombre de lignes correspondantes par fichier.-Y
permet de faire correspondre des modèles vides. Grepper avec des modèles de correspondance vide est étrange et donne des résultats différents avec GNU grep par rapport à BSD grep. Les correspondances vides ne sont pas générées par ugrep par défaut, ce qui évite de commettre des erreurs pouvant produire des résultats "aléatoires". Par exemple, avec GNU/BSD grep, le modèle a*
correspond à chaque ligne de l'entrée et correspond en fait xyz
trois fois (les transitions vides avant et entre les x
, y
et z
). Autoriser les correspondances vides nécessite l'option ugrep -Y
. Les modèles qui commencent par ^
ou se terminent par $
, tels que ^h*$
, correspondent à des modèles vides. Ces modèles activent automatiquement l'option -Y
.-D, --devices=ACTION
est skip
par défaut, au lieu de read
. Cela évite de s'accrocher de manière inattendue aux canaux nommés dans les répertoires recherchés de manière récursive, comme cela peut arriver avec GNU/BSD grep qui read
les périphériques par défaut.-d, --directories=ACTION
est skip
par défaut, au lieu de read
. Par défaut, les répertoires spécifiés sur la ligne de commande sont recherchés, mais pas de manière récursive plus profonde dans les sous-répertoires.-N PATTERN
, qui sont des modèles de la forme (?^X)
qui ignorent toutes les entrées X
, supprimant ainsi X
de la recherche. Par exemple, les modèles négatifs peuvent être utilisés pour ignorer les chaînes et les commentaires lors de la recherche d'identifiants dans le code source et trouver des correspondances qui ne figurent pas dans les chaînes et les commentaires. Les modèles zap
prédéfinis utilisent des modèles négatifs, par exemple, utilisez -f cpp/zap_comments
pour ignorer les correspondances de modèles dans les commentaires C++.GREP_OPTIONS
, car le comportement de ugrep doit être portable et prévisible sur chaque système. GNU grep a également abandonné GREP_OPTIONS
pour cette raison. Veuillez utiliser la commande ug
qui charge le fichier de configuration .ugrep situé dans le répertoire de travail ou dans le répertoire personnel lorsqu'il est présent, ou utilisez des alias shell pour créer de nouvelles commandes avec des options de recherche spécifiques.? Retour à la table des matières
Pour effectuer une recherche à l'aide d'un fichier de configuration .ugrep
placé dans le répertoire de travail ou le répertoire personnel (notez que ug
est identique à ugrep --config
) :
ug PATTERN FILE...
Pour enregistrer un fichier de configuration .ugrep
dans le répertoire de travail, puis modifiez ce fichier dans votre répertoire personnel pour personnaliser vos préférences pour les valeurs par défaut ug
:
ug --save-config
Pour effectuer une recherche dans le répertoire de travail et de manière récursive plus profonde pour main
(notez que les liens symboliques -r
recurse sont activés par défaut si aucun argument de fichier n'est spécifié) :
ug main
Idem, mais recherchez uniquement les fichiers de code source C++ de manière récursive, en ignorant tous les autres fichiers :
ug -tc++ main
Idem, en utilisant la requête interactive TUI, en commençant par le modèle de recherche initial main
(notez que -Q
avec un modèle initial nécessite l'option -e
car les modèles sont normalement spécifiés de manière interactive et tous les arguments de ligne de commande sont considérés comme des fichiers/répertoires) :
ug -Q -tc++ -e main
Pour rechercher #define
(et # define
etc.) à l'aide d'un modèle d'expression régulière dans les fichiers C++ (notez que les modèles doivent être cités pour empêcher la globalisation du shell *
et ?
) :
ug -tc++ '#[t ]*define'
Pour rechercher main
sous forme de mot ( -w
) de manière récursive sans suivre les liens symboliques ( -r
) dans le répertoire myproject
, en affichant les numéros de ligne ( -n
) et de colonne ( -k
) correspondants à côté des lignes correspondantes :
ug -r -nkw main myproject
Idem, mais recherchez uniquement myproject
sans récurer plus profondément (notez que les arguments du répertoire sont recherchés à un niveau par défaut) :
ug -nkw main myproject
Idem, mais recherchez myproject
et un niveau de sous-répertoire plus profond (deux niveaux) avec -2
:
ug -2 -nkw main myproject
Idem, mais recherchez uniquement les fichiers C++ dans myproject
et ses sous-répertoires avec -tc++
:
ug -tc++ -2 -nkw main myproject
Idem, mais recherchez également dans les archives (par exemple les fichiers zip et tar) et les fichiers compressés avec -z
:
ug -z -tc++ -2 -nkw main myproject
Recherchez récursivement le répertoire de travail pour main
tout en ignorant les fichiers gitignored (par exemple en supposant que .gitignore
se trouve dans le répertoire de travail ou ci-dessous) :
ug --ignore-files -tc++ -nkw main
Pour lister tous les fichiers du répertoire de travail et plus profonds qui ne sont pas ignorés par le(s) fichier(s) .gitignore
:
ug --ignore-files -l ''
Pour afficher la liste des extensions de nom de fichier et des « octets magiques » (shebangs) recherchés correspondant aux arguments -t
:
ug -tlist
Pour lister tous les fichiers shell de manière récursive, en fonction des extensions et des shebangs avec -l
(notez que ''
correspond à tout fichier non vide) :
ug -l -tShell ''
? Retour à la table des matières
Pour rechercher main
dans le code source tout en ignorant les chaînes et les blocs de commentaires, vous pouvez utiliser des modèles négatifs avec l'option -N
pour ignorer les correspondances indésirables dans les chaînes entre guillemets et les blocs de commentaires C/C++ :
ug -r -nkw -e 'main' -N '"(\.|\r?n|[^\n"])*"|//.*|/*(.*n)*?.**+/' myproject
C'est beaucoup de travail pour taper correctement ! Si vous êtes comme moi, je ne veux pas passer du temps à manipuler des modèles d'expressions régulières lorsque je travaille sur quelque chose de plus important. Il existe un moyen plus facile d'utiliser les modèles prédéfinis d' Uillep ( -f
) qui sont installés avec l'outil ugrep
:
ug -r -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
Cette requête recherche également via d'autres fichiers que le code source C / C ++, comme les lectures, les makefiles, etc. Nous sautons également les liens symboliques avec -r
. Affinons donc cette requête en sélectionnant les fichiers C / C ++ uniquement en utilisant l'option -tc,c++
et incluez SymLinks aux fichiers et répertoires avec -R
:
ug -R -tc,c++ -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
Et si vous voulez seulement rechercher l'identifiant main
mais pas comme une fonction main(
? Dans ce cas, utilisez un motif négatif pour que cela saute mainh*(
Match Matchs:
ug -R -tc,c++ -nkw -e 'main' -N 'mainh*(' -f c/zap_strings -f c/zap_comments myproject
Cela utilise les options -e
et -N
pour spécifier explicitement un motif et un modèle négatif, respectivement, qui forme essentiellement le modèle main|(?^mainh*()
, où h
correspond à l'espace et à l'onglet. En général , les modèles négatifs sont utiles pour filtrer les correspondances de motifs qui ne nous intéressent pas.
Comme autre exemple, disons que nous voulons peut-être rechercher le mot FIXME
dans les blocs de commentaires C / C ++. Pour ce faire, nous pouvons d'abord sélectionner les blocs de commentaires avec le modèle c/comments
prédéfini d' Uillep , puis sélectionner les lignes avec FIXME
à l'aide d'un tuyau:
ug -R -tc,c++ -nk -f c/comments myproject | ug -w 'FIXME'
Le filtrage des résultats avec les tuyaux est généralement plus facile que l'utilisation et la logique que certains outils de recherche utilisent. Cette approche suit l'esprit Unix pour garder les services publics simples et les utiliser en combinaison pour des tâches plus complexes.
Produisons une liste triée de tous les identifiants trouvés dans le code source Java tout en sautant les chaînes et les commentaires:
ug -R -tjava -f java/names myproject | sort -u
Cela correspond aux identificateurs Java Unicode à l'aide du regex p{JavaIdentifierStart}p{JavaIdentifierPart}*
défini dans patterns/java/names
.
Avec les outils Grep et Grep traditionnels, il faut beaucoup d'efforts pour rechercher récursivement le fichier source C / C ++ qui définit la fonction qsort
, nécessitant quelque chose comme ceci:
ug -R --include='*.c' --include='*.cpp' '^([ t]*[[:word:]:*&]+)+[ t]+qsort[ t]*([^;n]+$' myproject
Heureusement, avec UGREP, nous pouvons simplement sélectionner toutes les définitions de fonction dans des fichiers avec extension .c
ou .cpp
en utilisant l'option -Oc,cpp
et en utilisant une functions
de modèle prédéfinie qui est installée avec l'outil pour produire toutes les définitions de fonction. Ensuite, nous sélectionnons celui que nous voulons:
ug -R -Oc,cpp -nk -f c/functions | ug 'qsort'
Notez que nous aurions pu utiliser -tc,c++
pour sélectionner les fichiers C / C ++, mais cela inclut également les fichiers d'en-tête lorsque nous voulons uniquement rechercher les fichiers .c
et .cpp
.
Nous pouvons également ignorer les fichiers et les répertoires de la recherche qui sont définis dans .gitignore
. Pour ce faire, nous utilisons --ignore-files
pour exclure tous les fichiers et répertoires à partir de recherches récursives qui correspondent aux globs dans .gitignore
, lorsqu'un ou plusieurs fichiers .gitignore
sont trouvés:
ug -R -tc++ --ignore-files -f c++/defines
Cela recherche des fichiers C ++ ( -tc++
) dans le répertoire de travail pour les lignes #define
( -f c++/defines
), tout en sautant les fichiers et les répertoires déclarés dans .gitignore
. Si vous trouvez cela trop long à taper, définissez un alias pour rechercher les répertoires GitHub:
alias ugit='ugrep -R --ignore-files'
ugit -tc++ -f c++/defines
Pour mettre en évidence les correspondances lorsqu'elles sont poussées à travers une chaîne de tuyaux, nous devons utiliser --color=always
:
ugit --color=always -tc++ -f c++/defines | ugrep -w 'FOO.*'
Cela renvoie une liste de couleurs sur tous les fichiers de code source #define FOO...
dans des fichiers de code source C / C ++, en sautant des fichiers définis dans .gitignore
.
Notez que le complément de --exclude
n'est pas --include
, car les exclusions ont toujours la priorité sur les inclusions, nous ne pouvons donc pas énumérer de manière fiable les fichiers qui sont ignorés avec --include-from='.gitignore'
. Seuls les fichiers explicitement spécifiés avec --include
et les répertoires explicitement spécifiés avec --include-dir
sont visités. Le --include-from
des listes de globes qui sont considérés comme des fichiers et des répertoires pour ajouter à --include
et --include-dir
, respectivement. Cela signifie que lorsque les noms de répertoires et les chemins de répertoire ne sont pas explicitement répertoriés dans ce fichier, il ne sera pas visité en utilisant --include-from
.
Étant donné que UGREP vérifie si l'entrée est un Unicode codé par UTF valide (sauf si -U
est utilisé), il est possible de l'utiliser comme filtre pour ignorer la sortie non UTF produite par un programme:
program | ugrep -I ''
Si le programme produit une sortie valide, la sortie est passée, sinon la sortie est filtrée Option -I
. Si la sortie est initialement valide pour une très grande partie mais est suivie d'une sortie non valide, alors UGREP peut initialement afficher la sortie jusqu'à l'exclusion de la sortie non valide, après quoi une sortie supplémentaire est bloquée.
Pour filtrer les lignes qui sont valides ASCII ou encodées UTF, tout en supprimant les lignes qui ne sont pas:
program | ugrep '[p{Unicode}--[n]]+'
Notez que p{Unicode}
correspond à n
mais nous ne voulons pas correspondre à l'ensemble du fichier! Juste les lignes avec [p{Unicode}--[n]]+
.
? Retour à la table des matières
La page Utudep Man:
man ugrep
Pour afficher une page d'aide:
ug --help
Pour afficher des options qui mentionnent WHAT
:
ug --help WHAT
Pour afficher une liste des valeurs d'option -t TYPES
:
ug -tlist
Dans la requête interactive TUI, appuyez sur F1 ou Ctrl-Z pour l'aide et les options:
ug -Q
? Retour à la table des matières
--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.
La commande ug
est destinée à la recherche interactive dépendante du contexte et équivaut à la commande ugrep --config
Config pour charger le fichier de configuration .ugrep
lorsqu'il est présent dans le répertoire de travail ou, lorsqu'il n'est pas trouvé, dans le répertoire domestique:
ug PATTERN ...
ugrep --config PATTERN ...
La commande ug
trie également les fichiers par nom par répertoire recherché. Un fichier de configuration contient NAME=VALUE
par ligne, où NAME
est le nom d'une longue option (sans --
) et =VALUE
est un argument, qui est facultatif et peut être omis en fonction de l'option. Les lignes et les lignes vides commençant par un #
sont ignorées:
# 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
Les options de ligne de commande sont analysées dans l'ordre suivant: D'abord le fichier de configuration (par défaut ou nommé) est chargé, puis les options et arguments restants sur la ligne de commande sont analysés.
Option --stats
affiche le fichier de configuration utilisé après la recherche.
Les fichiers de configuration nommés sont destinés à rationaliser les tâches de recherche personnalisées, en réduisant le nombre d'options de ligne de commande dans un seul ---FILE
pour utiliser la collection d'options spécifiées dans FILE
. L'option --config=FILE
et son formulaire abrégé ---FILE
Chargez le fichier de configuration spécifié situé dans le répertoire de travail ou, lorsqu'il n'est pas trouvé, situé dans le répertoire domestique:
ug ---FILE PATTERN ...
ugrep ---FILE PATTERN ...
Une erreur est produite lorsque FILE
n'est pas trouvé ou ne peut pas être lu.
Les fichiers de configuration nommés peuvent être utilisés pour définir une collection d'options spécifiques aux exigences d'une tâche dans le flux de travail de développement d'un projet. Par exemple, pour signaler les problèmes non résolus en vérifiant le code source et la documentation pour les commentaires avec des éléments FIXME et TODO. Ce fichier de configuration nommé peut être localisé dans un projet en le plaçant dans le répertoire du projet, ou il peut être mondial en le plaçant dans le répertoire domestique. Pour les commentaires visuels, un schéma de couleurs spécifique à cette tâche peut être spécifié avec colors
d'option dans le FILE
de configuration pour aider à identifier la sortie produite par une configuration nommée par opposition à la configuration par défaut.
L'option --save-config
enregistre un fichier de configuration .ugrep
dans le répertoire de travail à l'aide de la configuration actuelle chargée avec --config
. Cela enregistre la configuration actuelle combinée avec des options supplémentaires lorsqu'elles sont également spécifiées. Seules les options qui ne peuvent pas entrer en conflit avec d'autres options et options qui ne peuvent pas affecter négativement les résultats de recherche seront enregistrées.
L'option --save-config=FILE
enregistre la configuration dans le FILE
spécifié. La configuration est écrite à la sortie standard lorsque FILE
est un -
.
Alternativement, un fichier de configuration peut être créé manuellement ou modifié. Un fichier de configuration peut inclure une ou plusieurs config[=FILE]
pour charger indirectement le FILE
specfified, mais le chargement de configuration récursif est interdit. Le moyen le plus simple de créer un fichier de configuration consiste à spécifier config
en haut du fichier, suivi des longues options pour remplacer les défauts.
? Retour à la table des matières
-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.
Cette option démarre une interface utilisateur pour saisir les modèles de recherche de manière interactive:
-c
de compter les correspondances. Appuyez à nouveau sur Alt-C désactive -c
. Les options peuvent être basculées avec la touche ALT lors de la recherche ou lors de la visualisation de l'écran d'aide. Si les touches ALT / META ne sont pas prises en charge (par exemple x11 xterm), appuyez sur Ctrl-O suivie de la touche correspondant à l'option.-g
et les globs de correspondance du répertoire, une liste séparée par des virgules de modèles de glob de style Gitignore. Appuyez sur l'ESC renvoie le contrôle de l'invite du modèle de requête (les globs sont enregistrés). Quand un globe est précédé par A !
ou un ^
, saute des fichiers dont le nom correspond au globe lorsqu'un globe contient /
noms de chemin complets. Sinon, les noms de base sont appariés. Lorsqu'un globe se termine par A /
, les répertoires sont appariés.Q>
(normal), F>
(chaînes fixes), G>
(regex de base), P>
(correspondance perl) et Z>
(correspondance floue). Lorsque l'invite --glob=
est affichée, une liste séparée par des virgules de modèles de globe de style Gitignore peut être entrée. Appuyez sur le contrôle ESC renvoie à l'invite de modèle.--view
.--view=COMMAND
. Sinon, les variables d'environnement PAGER
ou EDITOR
sont utilisées pour invoquer la commande avec Ctrl-Y. Les noms de fichiers doivent être activés et visibles dans la sortie pour utiliser cette fonctionnalité.--color
.DELAY
faible telle que 1. Cependant, les valeurs plus faibles peuvent augmenter la charge du système en raison de l'initiation et de l'annulation de recherches à plusieurs reprises par chaque touche appuyée.--heading
est activée par défaut. Appuyez sur Alt- + pour désactiver les en-têtes.Requête sur la cartographie des clés TUI:
clé (s) | fonction |
---|---|
Alt-key | Togle l'option de ligne de commande UGREP correspondant à key |
Alt-/ xxxx / | Insérer un point de code hexagonal Unicode U + xxxx |
Esc Ctrl-C | Revenir ou sortir |
Ctrl-Q | sortie rapide et sortie les résultats sélectionnés en mode de sélection |
Tab | chdir au répertoire du fichier affiché en haut de l'écran ou sélectionnez le fichier |
Shift-Tab | chdir un niveau vers le haut ou désélectionner le fichier |
Enter | Entrez le mode de sélection et basculez les lignes sélectionnées pour sortir à la sortie |
Up Ctrl-P | monter |
Down Ctrl-N | descendre |
Ctrl-B Left | aller à gauche |
Ctrl-F Right | aller à droite |
PgUp Ctrl-G | Déplacez l'affichage par une page |
PgDn Ctrl-D | Déplacer l'affichage vers le bas par une page |
Alt-Up | Déplacez l'affichage vers le haut de 1/2 page (MacOS Shift-Up ) |
Alt-Down | Déplacer l'affichage vers le bas de 1/2 page (MacOS Shift-Down ) |
Alt-Left | Déplacer l'affichage à gauche par 1/2 page (macOS Shift-Left ) |
Alt-Right | Déplacer l'affichage à droite par 1/2 page (macOS Shift-Right ) |
Home Ctrl-A | déplacer le curseur au début de la ligne |
End Ctrl-E | déplacer le curseur à la fin de la ligne |
Ctrl-K | Supprimer après le curseur |
Ctrl-L | écran de rafraîchissement |
key Ctrl-O + | Togle l'option de ligne de commande UGREP correspondant à key , comme Alt-key |
Ctrl-R F4 | sauter pour mettre en signet |
Ctrl-S | Sautez au prochain Dir / File / Context |
Ctrl-T F5 | Toggle Split Screen ( --split démarre un TUI à écran partagé) |
Ctrl-U | Supprimer avant le curseur |
Ctrl-V | caractère textuel |
Ctrl-W | sauter en arrière un dir / fichier / contexte |
Ctrl-X F3 | mettre en signet |
Ctrl-Y F2 | Afficher ou modifier le fichier affiché en haut de l'écran |
Ctrl-Z F1 | Afficher l'aide et les options |
Ctrl-^ | Chdir Retour au répertoire de travail de départ |
Ctrl-] | Couleur à bascule / mono |
Ctrl- | terminer le processus |
Pour rechercher de manière interactive les fichiers dans le répertoire de travail et ci-dessous:
ug -Q
Même, mais limité aux fichiers C ++ uniquement et ignorer les fichiers .gitignore
:
ug -Q -tc++ --ignore-files
Pour rechercher de manière interactive toutes les makefiles dans le répertoire de travail et ci-dessous:
ug -Q -g 'Makefile*' -g 'makefile*'
Idem, mais pour jusqu'à 2 niveaux de répertoire (travail et un niveau de sous-répertoire):
ug -Q -2 -g 'Makefile*' -g 'makefile*'
Pour afficher de manière interactive le contenu de main.cpp
et le rechercher, où -y
montre toutes les lignes non correspondantes comme contexte:
ug -Q -y main.cpp
Pour rechercher de manière interactive main.cpp
, en commençant par le modèle de recherche TODO
et un contexte de correspondance de 5 lignes (le contexte peut être activé de manière interactive et désactivée, cela remplace également la taille de contexte par défaut de 2 lignes):
ug -Q -C5 -e TODO main.cpp
Pour voir et rechercher le contenu d'une archive (par exemple Zip, tarball):
ug -Q -z archive.tar.gz
Pour sélectionner de manière interactive des fichiers de project.zip
à décompresser avec unzip
, en utilisant le mode de sélection de requête UGREP (appuyez sur Entrée pour sélectionner les lignes):
unzip project.zip `zipinfo -1 project.zip | ugrep -Q`
? Retour à la table des matières
-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.
Si aucun argument de fichier n'est spécifié et que l'entrée est lue à partir d'un terminal, des recherches récursives sont effectuées comme si -r
était spécifié. Pour forcer la lecture à partir de l'entrée standard, spécifiez -
comme argument de fichier.
Pour répertorier récursivement tous les fichiers non vides dans le répertoire de travail:
ug -r -l ''
Pour répertorier tous les fichiers non vides dans le répertoire de travail mais pas plus profondément (car un argument de fichier est donné, dans ce cas .
Pour le répertoire de travail):
ug -l '' .
Pour répertorier tous les fichiers non vides dans le répertoire mydir
mais pas plus profondément (car un argument de fichier est donné):
ug -l '' mydir
Pour répertorier tous les fichiers non vides dans le répertoire mydir
et plus profondément tout en suivant SymLinks:
ug -R -l '' mydir
Pour répertorier récursivement tous les fichiers non vides sur le chemin spécifié, tout en visitant les sous-répertoires uniquement, c'est-à-dire les répertoires mydir/
et les sous-répertoires à un niveau plus profond mydir/*/
sont visités (notez que -2 -l
peut être abrégé sur -l2
):
ug -2 -l '' mydir
Pour répertorier récursivement tous les fichiers non vides dans Directory mydir
, ne suivant aucun lien symbolique (sauf en ligne de commande comme mydir
):
ug -rl '' mydir
Pour répertorier récursivement toutes les makefiles correspondant au texte CPP
:
ug -l -tmake 'CPP'
Pour répertorier récursivement tous Makefile.*
Match bin_PROGRAMS
:
ug -l -g'Makefile.*' 'bin_PROGRAMS'
Pour répertorier récursivement tous les fichiers non vides avec extension .sh, avec -Osh
:
ug -l -Osh ''
Pour répertorier récursivement tous les scripts shell en fonction des extensions et des shebangs avec -tShell
:
ug -l -tShell ''
Pour répertorier récursivement tous les scripts shell en fonction des extensions uniquement avec -tshell
:
ug -l -tshell ''
? Retour à la table des matières
--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.
Notez que les options --and
--not
et --andnot
et les options nécessitent -e PATTERN
.
L'option -%
rend tous les modèles basés sur la booléenne, prenant en charge les opérations logiques suivantes énumérées du plus haut niveau de priorité au plus bas:
opérateur | alternative | résultat |
---|---|---|
"x" | Faites correspondre x littéralement et exactement comme spécifié (en utilisant le regex standard s'échappe Q et E ) | |
( ) | Groupe d'expression booléenne | |
-x | NOT x | match inversé, c'est-à-dire les matchs si x ne correspond pas |
x|y | x OR y | correspond aux lignes avec x ou y |
xy | x AND y | correspond aux lignes avec x et y |
x
et y
sont des sous-bassins qui ne commencent pas par les symboles spéciaux |
, -
et (
(utilisez des citations ou une Escape pour les correspondre);
-
et NOT
sont pas les mêmes et ont la priorité sur OR
, ce qui signifie que -x|y
== (-x)|y
par exemple.
|
et OR
sont les mêmes et ont la priorité AND
, ce qui signifie que xy|z
== x (y|z)
par exemple;
L'option --stats
affiche les requêtes booléennes sous forme lisible par l'homme converti en CNF (formulaire normal conjonctif), une fois la recherche terminée. Pour afficher le CNF sans recherche, lisez à partir de l'entrée standard terminée par un EOF, comme echo | ugrep -% '...' --stats
.
Les sous-bassins sont à la recherche de couleurs dans la sortie, à l'exception de ceux niés avec NOT
(un sous-sous- NOT
peut toujours apparaître dans une ligne correspondante lors de l'utilisation d'un motif OR-Not comme x|-y
). Notez que les sous-bassins peuvent se chevaucher. Dans ce cas, seul le premier sous-plier assorti est victime de couleurs.
Plusieurs lignes peuvent être appariées lorsque les sous-bassins correspondent à Newlines. Il y a une exception cependant: les sous-bassins se terminant par (?=X)
LoaHeads peuvent ne pas correspondre lorsque X
s'étend sur plusieurs lignes.
Les modèles vides correspondent à n'importe quelle ligne (standard GREP). Par conséquent, -% 'x|""|y'
correspond à tout et x
et y
ne sont pas des couleurs vides. L'option -y
doit être utilisée pour afficher chaque ligne comme contexte, par exemple -y 'x|y'
.
Requête interactive de type FZF (recherche booléenne avec des chaînes fixes avec correspondance floue pour permettre par EG jusqu'à 4 caractères supplémentaires assortis avec -Z+4
en mots avec -w
), appuyez sur Tab et Alt-y pour afficher un fichier avec des correspondances. Appuyez sur Shift-Tab et Alt-L pour revenir à la liste des fichiers correspondants:
ug -Q -%% -l -w -F -Z+4 --sort=best
Pour trouver de manière récursive tous les fichiers contenant à la fois hot
et dog
n'importe où dans le fichier avec l'option --files
:
ug -%% 'hot dog'
ug --files -e hot --and dog
Pour trouver des lignes contenant à la fois hot
et dog
dans myfile.txt
:
ug -% 'hot dog' myfile.txt
ug -e hot --and dog myfile.txt
Pour trouver des lignes contenant place
, puis aussi hotdog
ou taco
(ou les deux) dans myfile.txt
:
ug -% 'hotdog|taco place' myfile.txt
ug -e hotdog -e taco --and place myfile.txt
Idem, mais exclure les lignes correspondant diner
:
ug -% 'hotdog|taco place -diner' myfile.txt
ug -e hotdog -e taco --and place --andnot diner myfile.txt
Pour trouver des lignes avec diner
ou des lignes qui correspondent à la fois fast
et food
mais pas bad
dans myfile.txt
:
ug -% 'diner|(fast food -bad)' myfile.txt
Pour trouver des lignes avec fast food
(exactement) ou des lignes avec diner
mais pas bad
ou old
dans myfile.txt
:
ug -% '"fast food"|diner -bad -old' myfile.txt
Idem, mais en utilisant une expression booléenne différente qui a la même signification:
ug -% '"fast food"|diner -(bad|old)' myfile.txt
Pour trouver des lignes avec diner
impliquant good
dans myfile.txt
(c'est-à-dire, montrez des lignes avec good
sans diner
et affichez des lignes avec diner
mais seulement celles avec good
, ce qui est logiquement implicite!):
ug -% 'good|-diner' myfile.txt
ug -e good --not diner myfile.txt
Pour trouver des lignes avec foo
et -bar
et "baz"
dans myfile.txt
(pas que -
et "
devrait être apparié en utilisant Escapes et avec
--and -e -bar
):
ug -% 'foo -bar "baz"' myfile.txt
ug -e foo --and -e -bar --and '"baz"' myfile.txt
Pour rechercher myfile.cpp
les lignes avec TODO
ou FIXME
mais pas les deux sur la même ligne, comme Xor:
ug -% 'TODO|FIXME -(TODO FIXME)' myfile.cpp
ug -e TODO -e FIXME --and --not TODO --not FIXME myfile.cpp
? Retour à la table des matières
-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 $.
Voir aussi les modèles de requête booléens avec -%, - %%, - et, pas pour des options de requête booléennes plus puissantes que les options GNU / BSD traditionnelles GNU / BSD.
Pour afficher les lignes dans le fichier myfile.sh
mais pas les lignes correspondant ^[ t]*#
:
ug -v '^[ t]*#' myfile.sh
Pour rechercher myfile.cpp
les lignes avec FIXME
et urgent
, mais pas Scotty
:
ugrep FIXME myfile.cpp | ugrep urgent | ugrep -v Scotty
Idem, mais en utilisant -%
pour les requêtes booléennes:
ug -% 'FIXME urgent -Scotty' myfile.cpp
Pour rechercher des décimales en utilisant le motif d+
qui ne commencent pas par 0
en utilisant le modèle négatif 0d+
et à l'exclusion de 555
:
ug -e 'd+' -N '0d+' -N 555 myfile.cpp
Pour rechercher des mots commençant par disp
sans faire correspondre display
dans le fichier myfile.py
en utilisant un "modèle négatif" -N '/<display>'
où -N
spécifie un modèle négatif supplémentaire pour sauter les correspondances:
ug -e '<disp' -N '<display>' myfile.py
Pour rechercher des lignes avec l' display
Word dans le fichier myfile.py
sautant ce mot en chaînes et commentaires, où -f
spécifie des modèles dans des fichiers qui sont des modèles prédéfinis dans ce cas:
ug -n -w 'display' -f python/zap_strings -f python/zap_comments myfile.py
Pour afficher des lignes qui ne sont pas des lignes vierges:
ug -x -e '.*' -N 'h*' myfile.py
Idem, mais en utilisant -v
et -x
avec h*
, ie motif ^h*$
:
ug -v -x 'h*' myfile.py
Pour répertorier récursivement tous les fichiers Python qui ne contiennent pas l' display
du mot, permettant au mot de se produire dans les chaînes et les commentaires:
ug -RL -tPython -w 'display' -f python/zap_strings -f python/zap_comments
? Retour à la table des matières
--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.)
Les fichiers binaires, ASCII et UTF-8 ne nécessitent pas cette option pour les rechercher. Les fichiers UTF-16 et UTF-32 ne nécessitent pas cette option pour les rechercher, en supposant que les fichiers UTF-16 et UTF-32 commencent par une BOM UTF (commande d'octets) comme d'habitude. Les autres encodages de fichiers nécessitent l'option --encoding=ENCODING
:
codage | paramètre |
---|---|
ASCII | n / A |
UTF-8 | n / A |
UTF-16 avec bom | n / A |
UTF-32 avec bom | n / A |
Utf-16 être sans bom | UTF-16 ou UTF-16BE |
Utf-16 le w / o bom | UTF-16LE |
UTF-32 W / S BOM | UTF-32 ou UTF-32BE |
UTF-32 W / S BOM | UTF-32LE |
Latin-1 | LATIN1 ou ISO-8859-1 |
ISO-8859-1 | ISO-8859-1 |
ISO-8859-2 | ISO-8859-2 |
ISO-8859-3 | ISO-8859-3 |
ISO-8859-4 | ISO-8859-4 |
ISO-8859-5 | ISO-8859-5 |
ISO-8859-6 | ISO-8859-6 |
ISO-8859-7 | ISO-8859-7 |
ISO-8859-8 | ISO-8859-8 |
ISO-8859-9 | ISO-8859-9 |
ISO-8859-10 | ISO-8859-10 |
ISO-8859-11 | ISO-8859-11 |
ISO-8859-13 | ISO-8859-13 |
ISO-8859-14 | ISO-8859-14 |
ISO-8859-15 | ISO-8859-15 |
ISO-8859-16 | ISO-8859-16 |
Mac (cr = newline) | MAC |
Macroman (cr = newline) | MACROMAN |
EBCDIC | EBCDIC |
DOS Code Page 437 | CP437 |
Page 850 du code DOS | CP850 |
DOS Code Page 858 | CP858 |
Page 1250 du code Windows | CP1250 |
Code Windows Page 1251 | CP1251 |
Code Windows Page 1252 | CP1252 |
Code Windows Page 1253 | CP1253 |
Code Windows Page 1254 | CP1254 |
Code Windows Page 1255 | CP1255 |
Code Windows Page 1256 | CP1256 |
Code Windows Page 1257 | CP1257 |
Code Windows Page 1258 | CP1258 |
Koi8-r | KOI8-R |
Koi8-u | KOI8-U |
Koi8-ru | KOI8-RU |
Notez que les modèles regex sont toujours spécifiés dans UTF-8 (inclut ASCII). Pour rechercher des fichiers binaires avec des modèles binaires, voir la recherche et l'affichage des fichiers binaires avec -u, -w et -x.
Pour répertorier récursivement tous les fichiers ASCII (IE 7 bits):
ug -L '[^[:ascii:]]'
Pour répertorier récursivement tous les fichiers non ASCII, IE UTF-8, UTF-16 et UTF-32 avec des caractères Unicode non ASCII (U + 0080 et plus):
ug -l '[^[:ascii:]]'
Pour vérifier si un fichier contient non ascii Unicode (U + 0080 et plus):
ug -q '[^[:ascii:]]' myfile && echo "contains Unicode"
Pour supprimer les caractères Unicode non valides d'un fichier (notez que -o
peut ne pas fonctionner parce que les données binaires sont détectées et rejetées et que NewLines est ajoutée, mais --format="%o%
ne vérifie pas le binaire et copie le match" tel quel " ) :
ug "[p{Unicode}n]" --format="%o" badfile.txt
Pour répertorier récursivement des fichiers avec du contenu UTF non valide (c.-à-d. Des séquences d'octets UTF-8 non valides ou des fichiers contenant des points de code UTF-8 / 16/32 qui sont en dehors de la plage Unicode valide) en correspondant à tout point de code avec .
et en utilisant un motif négatif -N 'p{Unicode}'
pour ignorer chaque caractère Unicode valide:
ug -l -e '.' -N 'p{Unicode}'
Pour afficher les lignes contenant des emojis de visage qui rit:
ug '[?-?]' emojis.txt
Les mêmes résultats sont obtenus en utilisant x{hhhh}
pour sélectionner une plage de caractères Unicode:
ug '[x{1F600}-x{1F60F}]' emojis.txt
Pour afficher les lignes contenant les noms Gödel (ou Goedel), Escher ou Bach:
ug 'G(ö|oe)del|Escher|Bach' GEB.txt wiki.txt
Pour rechercher lorem
dans un case inférieure ou supérieure dans un fichier UTF-16 marqué d'une nomenclature UTF-16:
ug -iw 'lorem' utf16lorem.txt
Pour rechercher UTF16LOrem.txt lorsque ce fichier n'a pas de bom UTF-16, en utilisant --encoding
:
ug --encoding=UTF-16 -iw 'lorem' utf16lorem.txt
Pour rechercher le fichier spanish-iso.txt
encodé dans ISO-8859-1:
ug --encoding=ISO-8859-1 -w 'año' spanish-iso.txt
? Retour à la table des matières
-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.
Plusieurs lignes peuvent être appariées par des modèles qui correspondent aux caractères Newline. Utilisez l'option -o
pour sortir uniquement le match, pas les lignes complètes qui correspondent.
Pour faire correspondre une rupture de ligne n
, incluez n
dans le motif pour correspondre au caractère LF. Si vous souhaitez faire correspondre les ruptures de ligne rn
et n
, utilisez r?n
ou utilisez simplement R
pour faire correspondre toute rupture de ligne Unicode rn
, r
, v
, f
, n
, u +0085, U + 2028 et U + 2029.
Pour correspondre à C / C ++ /*...*/
Commentaires multi-lignes:
ug '/*(.*n)*?.**+/' myfile.cpp
Pour faire correspondre les commentaires C / C ++ en utilisant les modèles c/comments
prédéfinis avec -fc/comments
, limité à la partie correspondante uniquement avec l'option -o
:
ug -of c/comments myfile.cpp
Identique à sed -n '/begin/,/end/p'
: pour faire correspondre toutes les lignes entre une ligne contenant begin
et la première ligne après cette end
contenant, en utilisant la répétition paresseuse:
ug -o '.*begin(.|n)*?end.*' myfile.txt
? Retour à la table des matières
-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.
Pour afficher deux lignes de contexte avant et après une ligne correspondante:
ug -C2 'FIXME' myfile.cpp
Pour montrer trois lignes de contexte après une ligne appariée:
ug -A3 'FIXME.*' myfile.cpp:
Pour afficher une ligne de contexte avant chaque ligne de correspondance avec une définition de fonction C (les noms C ne sont pas uncode):
ug -B1 -f c/functions myfile.c
Pour afficher une ligne de contexte avant chaque ligne de correspondance avec une définition de la fonction C ++ (les noms C ++ peuvent être Unicode):
ug -B1 -f c++/functions myfile.cpp
Pour afficher toutes les lignes non correspondantes comme contexte pour les lignes correspondantes avec -y
:
ug -y -f c++/functions myfile.cpp
Pour afficher un hexdump d'une ligne correspondante avec une ligne de contexte hexdump:
ug -C1 -UX 'xaaxbbxcc' a.out
Le contexte dans une ligne est affiché avec l'option -o
avec une option de contexte:
ug -o -C20 'pattern' myfile.cpp
Idem, mais avec une jolie sortie avec des en-têtes, des numéros de ligne et des numéros de colonne ( -k
) et afficher le contexte:
ug --pretty -oC20 'pattern' myfile.cpp
? Retour à la table des matières
-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.
Les types de fichiers sont répertoriés avec ugrep -tlist
. La liste est basée sur des extensions de nom de fichier établies et des "octets magiques". Si vous avez un type de fichier qui n'est pas répertorié, utilisez les options -O
et / ou -M
. Vous voudrez peut-être définir un alias, par exemple alias ugft='ugrep -Oft'
comme un raccourci pour rechercher des fichiers avec le nom de fichier suffixe .ft
.
Pour afficher récursivement les définitions de fonctions dans les fichiers c / c ++ ( .h
, .hpp
, .c
, .cpp
etc.) avec des numéros de ligne avec -tc++
, -o
, -n
et -f c++/functions
:
ug -on -tc++ -f c++/functions
Pour afficher récursivement les définitions de fonctions dans les fichiers .c
et .cpp
avec des numéros de ligne avec -Oc,cpp
, -o
, -n
et -f c++/functions
:
ug -on -Oc,cpp -f c++/functions
Pour répertorier récursivement tous les fichiers shell avec -tShell
pour faire correspondre les extensions de nom de fichiers et les fichiers avec des shell shebangs, à l'exception des fichiers avec suffixe .sh
:
ug -l -tShell -O^sh ''
Pour répertorier récursivement tous les fichiers non coquilles avec -t^Shell
:
ug -l -t^Shell ''
Pour répertorier récursivement tous les fichiers shell avec des shell shebang qui n'ont pas d'extensions de nom de fichier shell:
ug -l -tShell -t^shell ''
Pour rechercher des lignes avec FIXME
dans les commentaires C / C ++, à l'exclusion FIXME
dans les chaînes multi-lignes:
ug -n 'FIXME' -f c++/zap_strings myfile.cpp
Pour lire les modèles TODO
et FIXME
de l'entrée standard aux lignes de correspondance dans l'entrée, tout en excluant les correspondances dans les chaînes C ++:
ug -on -f - -f c++/zap_strings myfile.cpp <<END
TODO
FIXME
END
Pour afficher l'élément XML et les balises d'attribut dans un fichier XML, limité à la partie correspondante avec -o
, excluant des balises qui sont placées dans des commentaires (multi-lignes):
ug -o -f xml/tags -f xml/zap_comments myfile.xml
? Retour à la table des matières
-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.
Fichiers compressés avec gzip ( .gz
), compress ( .Z
), bzip2 ( .bz
, .bz2
, .bzip2
), lzma ( .lzma
), xz ( .xz
), lz4 ( .lz4
), zstd ( .zst
, .zstd
), brotli ( .br
) et bzip3 ( .bz3
) sont recherchés avec l'option -z
lorsque les bibliothèques correspondantes sont installées et compilées avec UGREP. Cette option ne nécessite pas que les fichiers soient compressés. Les fichiers non compressés sont également recherchés, bien que plus lents.
D'autres formats de compression peuvent être recherchés avec des filtres UGREP .
Les archives (CPIO, JAR, PAX, TAR, ZIP et 7Z) sont recherchées avec l'option -z
. Des fichiers réguliers dans une archive qui correspondent sont sortis avec les archives PathNames enfermés en {
et }
orthographiques. Les formats TAR pris en charge sont V7, USTAR, GNU, OldGnu et Pax. Les formats CPIO pris en charge sont ODC, NEWC et CRC. Non pris en charge est le format cpio binaire non portable obsolète. Les formats d'archives CPIO, TAR et PAX sont automatiquement reconnus avec l'option -z
en fonction de leur contenu, indépendamment de leur suffixe de nom de fichier.
Par défaut, les archives non compressées stockées dans les archives ZIP sont également recherchées: tous les fichiers CPIO, PAX et TAR stockés dans les archives ZIP et 7Z sont automatiquement reconnus et recherchés. Cependant, par défaut, les fichiers compressés stockés dans les archives ne sont pas reconnus, par exemple les fichiers zip stockés dans les fichiers TAR ne sont pas recherchés, mais plutôt tous les fichiers et archives compressés sont recherchés comme s'il s'agissait de fichiers binaires sans les décompresser.
Spécifiez --zmax=NUM
pour rechercher des archives qui contiennent des fichiers et des archives compressés pour des niveaux jusqu'à NUM
niveaux profonds. La valeur de NUM
peut aller de 1 à 99 pour jusqu'à 99 étapes de décompression et de dé-archivage pour étendre jusqu'à 99 archives imbriquées. Plus grand --zmax=NUM
dégrader les performances. Il est peu probable que vous ayez besoin de 99 car --zmax=2
suffit pour la plupart des cas d'utilisation pratiques, tels que la recherche de fichiers zip stockés dans des fichiers TAR.
Lorsque l'option -z
est utilisée avec les options -g
, -O
, -M
ou -t
, les archives et les fichiers compressés et non compressés qui correspondent aux critères de sélection du nom de fichier (glob, extension, octets magiques ou type de fichier) sont recherchés uniquement. Par exemple, ugrep -r -z -tc++
recherche des fichiers C ++ tels que les archives main.cpp
et Zip et Tar qui contiennent des fichiers C ++ tels que main.cpp
. Les fichiers C ++ sont également inclus dans les fichiers C ++ compressés tels que main.cpp.gz
et main.cpp.xz
lorsqu'ils sont présents. Toutes les archives CPIO, PAX, TAR, ZIP et 7Z lorsqu'elles sont présentes sont recherchées les fichiers C ++ qu'ils contiennent, tels que main.cpp
. Utilisez l'option --stats
pour voir une liste des modèles GLOB appliqués pour filtrer les noms de chemin de fichier dans la recherche récursive et lors de la recherche de contenu d'archives.
Lorsque l'option -z
est utilisée avec les options -g
, -O
, -M
ou -t
pour rechercher les archives CPIO, JAR, PAX, TAR, ZIP et 7Z, les fichiers archivés qui correspondent aux critères de sélection de noms de fichiers sont recherchés uniquement.
Les formats GZIP, Compress et Zip sont automatiquement détectés, ce qui est utile lors de la lecture des données compressées par GZIP à partir d'entrée standard, par exemple l'entrée redirigée à partir d'un tuyau. D'autres formats de compression nécessitent un suffixe de nom de fichier: .bz
, .bz2
ou .bzip2
pour bzip2, .lzma
pour lzma, .xz
pour xz, .lz4
pour lz4, .zst
ou .zstd
pour zstd, .br
pour brotli et .bz3
pour bzip3. Les raccourcis archives TAR compressés .taz
, .tgz
et .tpz
pour gzip, .tbz
, .tbz2
, .tb2
et .tz2
pour bzip2, .tlz
pour LZMA, .txz
pour xz et .tzst
pour zstd sont reconnus. Pour rechercher ces formats avec UGREP à partir de l'entrée standard, utilisez l'option --label='stdin.bz2'
pour bzip2, --label='stdin.lzma'
pour lzma, --label='stdin.xz'
pour xz, --label='stdin.lz4
pour lz4 et --label='stdin.zst
pour zstd et ainsi de suite. Le nom stdin
est arbitraire et peut être omis:
format | suffixe de nom de fichier | Archive TAR / PAX Suffix court | suffixe requis? | Université de Stdin | bibliothèque |
---|---|---|---|---|---|
gzip | .gz | .taz , .tgz , .tpz | Non | automatique | libz |
compresse | .Z | .taZ , .tZ | Non | automatique | intégré |
fermeture éclair | .zip , .zipx , .ZIP | Non | automatique | libz | |
7zip | .7z | Oui | --label=.7z | intégré | |
bzip2 | .bz , .bz2 , .bzip2 | .tb2 , .tbz , .tbz2 , .tz2 | Oui | --label=.bz2 | libbz2 |
LZMA | .lzma | .tlz | Oui | --label=.lzma | liblzma |
xz | .xz | .txz | Oui | --label=.xz | liblzma |
lz4 | .lz4 | Oui | --label=.lz4 | liblz4 | |
zstd | .zst , .zstd | .tzst | Oui | --label=.zst | libzstd |
brotli | .br | Oui | --label=.br | libbrotlidec | |
bzip3 | .bz3 | Oui | --label=.bz3 | libbzip3 |
Les formats GZIP, BZIP2, XZ, LZ4 et ZSTD prennent en charge les fichiers compressés concatés. Les fichiers compressés concatés sont recherchés comme un seul fichier.
Les méthodes de compression ZIP prise en charge sont stockées (0), dégonflées (8), BZIP2 (12), LZMA (14), XZ (95) et ZSTD (93). Les méthodes BZIP2, LZMA, XZ et ZSTD nécessitent une compilation UGREP avec les bibliothèques de compression correspondantes.
La recherche d'archives ZIP cryptées n'est pas prise en charge (peut-être dans les versions futures, selon les demandes d'améliorations).
La recherche d'archives 7zip prend beaucoup plus de RAM et plus de temps par rapport aux autres méthodes. L'implémentation SDK 7ZIP LZMA ne prend pas en charge le streaming, nécessitant un fichier 7Z de recherche physique. Cela signifie que les fichiers 7Z ne peuvent pas être recherchés lorsqu'ils sont imbriqués dans les archives. Le meilleur est d'éviter 7zip. La prise en charge de 7ZIP peut être désactivée avec ./build.sh --disable-7zip
pour construire UGREP.
Option -z
utilise des threads pour le parallélisme des tâches pour accélérer la recherche de fichiers plus grands en exécutant le décompresseur simultanément avec une recherche du flux décompressé.
Pour répertorier tous les fichiers non vides stockés dans une archive package.zip
, y compris le contenu de tous les fichiers CPIO, PAX, TAR, ZIP et 7Z qui y sont stockés:
ug --zmax=2 -z -l '' package.zip
Idem, mais énumérez uniquement les fichiers de code source Python, y compris les scripts qui invoquent Python, avec l'option -tPython
( ugrep -tlist
pour plus de détails):
ug --zmax=2 -z -l -tPython '' package.zip
Pour rechercher des applications Python distribuées en tant que fichier TAR avec leurs dépendances incluent les roues (fichiers zip avec du code Python), la recherche du mot my_class
dans app.tgz
:
ug --zmax=2 -z -tPython -w my_class app.tgz
Pour rechercher des fichiers C ++ récursivement, y compris des fichiers compressés pour le mot my_function
, tout en sautant les commentaires C et C ++:
ug -z -r -tc++ -Fw my_function -f cpp/zap_comments
Pour rechercher des données compressées BZIP2, LZMA, XZ, LZ4 et ZSTD sur l'entrée standard, l'option --label
peut être utilisé pour spécifier l'extension correspondant au format de compression pour forcer la décompression lorsque l'extension BZIP2 n'est pas disponible pour UGREP, par exemple:
cat myfile.bz2 | ugrep -z --label='stdin.bz2' 'xyz'
Pour rechercher le fichier main.cpp
dans project.zip
pour les lignes TODO
et FIXME
:
ug -z -g main.cpp -w -e 'TODO' -e 'FIXME' project.zip
Pour rechercher Tarball project.tar.gz
pour les fichiers C ++ avec des lignes TODO
et FIXME
:
ug -z -tc++ -w -e 'TODO' -e 'FIXME' project.tar.gz
Pour rechercher des fichiers correspondant au glob *.txt
dans project.zip
pour la license
Word dans tous les cas (notez que l'argument -g
Glob doit être cité):
ug -z -g '*.txt' -w -i 'license' project.zip
Pour afficher et page via tous les fichiers C ++ dans Tarball project.tgz
:
ug --pager -z -tc++ '' project.tgz
Pour répertorier les fichiers correspondant au Gitignore-Style glob /**/projects/project1.*
dans projects.tgz
, en sélectionnant des fichiers contenant dans l'archive le texte December 12
:
ug -z -l -g '/**/projects/project1.*' -F 'December 12' projects.tgz
Pour afficher les données Meta-Inf / Manifest.MF dans un fichier JAR avec -Ojar
et -OMF
pour sélectionner le fichier JAR et le fichier MF là-bas ( -Ojar
est requis, sinon le fichier JAR sera ignoré bien que nous puissions le lire à partir de Entrée standard à la place):
ug -z -h -OMF,jar '' my.jar
Pour extraire les fichiers C ++ qui contiennent FIXME
de project.tgz
, nous utilisons -m1
avec --format="'%z '"
pour générer une liste de chemins de chemin séparée dans l'espace situé dans l'archive qui correspondent au mot FIXME
:
tar xzf project.tgz `ugrep -z -l -tc++ --format='%z ' -w FIXME project.tgz`
Pour effectuer une recherche en profondeur d'abord avec find
, utilisez cpio
et ugrep
pour rechercher les fichiers:
find . -depth -print | cpio -o | ugrep -z 'xyz'
? Retour à la table des matières
--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.
Pour répertorier récursivement tous les fichiers qui commencent par #!
Shebangs:
ug -l -M'#!' ''
Pour répertorier récursivement tous les fichiers qui commencent par #
mais pas avec #!
Shebangs:
ug -l -M'#' -M'^#!' ''
Pour répertorier récursivement tous les fichiers Python (extension .py
ou un shebang) avec -tPython
:
ug -l -tPython ''
Pour répertorier récursivement tous les fichiers non coquilles avec -t^Shell
:
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 (