Générateur de commandes grep et ripgrep
Créez des recherches grep et ripgrep avec inclusions, exclusions et contexte.
À propos de cet outil
Définissez le motif, où chercher, quels fichiers et dossiers inclure ou ignorer, et ce qu’il faut afficher (lignes avec contexte, correspondances seules, nombres ou noms de fichiers). Obtenez les commandes GNU grep et ripgrep correspondantes avec chaque option expliquée, et testez le motif sur un exemple de texte directement dans la page.
Mode d’emploi
- Saisissez ce qu’il faut rechercher. Plusieurs lignes deviennent plusieurs motifs, dont n’importe lequel peut correspondre.
- Choisissez la syntaxe regex, basique, texte brut ou Perl, et des options comme ignorer la casse ou mots entiers.
- Définissez où chercher et quels fichiers et dossiers inclure ou ignorer.
- Choisissez ce qu’il faut afficher, testez le motif sur un exemple de texte, puis copiez la commande grep ou ripgrep.
Questions
- Comment chercher de façon récursive en ignorant certains dossiers ?
- Ajoutez --exclude-dir pour chaque dossier, par exemple grep -r --exclude-dir=.git --exclude-dir=vendor pattern . Avec ripgrep, tout ce qui figure dans .gitignore est ignoré automatiquement, et -g '!folder/' permet d’en exclure davantage.
- Comment chercher uniquement dans certains types de fichiers ?
- Avec grep, ajoutez --include='*.log' (entre guillemets, pour que le shell ne développe pas l’étoile). Avec ripgrep, utilisez -g '*.log' ou un type intégré comme -t py ou -t java.
- Quelle est la différence entre grep -E et grep sans option ?
- grep sans option utilise les expressions régulières basiques, où + ? | ( ) sont des caractères ordinaires sauf s’ils sont échappés par une barre oblique inverse. -E passe à la syntaxe étendue, où ils fonctionnent comme des opérateurs, comme dans la plupart des langages de programmation.
- Faut-il utiliser grep ou ripgrep ?
- ripgrep (rg) est beaucoup plus rapide sur les gros projets, cherche récursivement par défaut et respecte .gitignore. grep est installé sur tous les systèmes Unix, ce qui compte sur les serveurs et dans les scripts.
- Comment afficher les lignes autour de chaque correspondance ?
- Utilisez -C 3 pour trois lignes de contexte de chaque côté, ou -B et -A pour avant et après séparément. L’aperçu affiche ici les mêmes lignes de contexte.
- Comment chercher avec grep un motif qui commence par un tiret ?
- grep le lirait comme une option. Placez -e devant, comme dans grep -e "-v" notes.txt, ou terminez les options par deux tirets : grep -- "-v" notes.txt. L’outil ajoute automatiquement -e dès qu’un motif commence par un tiret.
- Comment chercher dans des fichiers journaux compressés .gz ?
- Un grep simple ne voit que des octets compressés, c’est pourquoi *.gz est exclu par défaut ici. Utilisez zgrep, qui accepte la plupart des options de grep, par exemple zgrep -i "timeout" /var/log/app.log.2.gz. Pour tout un dossier de journaux archivés par rotation, zgrep -i timeout /var/log/app.log* cherche à la fois dans les fichiers simples et compressés.
- Comment compter les correspondances plutôt que les lignes correspondantes ?
- grep -c compte les lignes : une ligne contenant trois correspondances ne compte qu’une fois. Pour compter chaque occurrence, affichez chaque correspondance sur sa propre ligne et comptez-les : grep -o "error" app.log | wc -l. Ajoutez -i aux deux commandes si la casse varie.
Comment rechercher plusieurs mots avec grep ?
Pour trouver les lignes qui contiennent l’un de plusieurs mots, utilisez la syntaxe étendue : grep -E "error|warn" app.log. On obtient le même résultat avec un -e par motif, grep -e error -e warn app.log, ce que vous obtenez ici en saisissant chaque motif sur sa propre ligne. En syntaxe de base, il faudrait écrire error\|warn, une extension GNU que le grep BSD de macOS peut refuser.
grep n’a pas d’opérateur ET. Pour trouver les lignes qui contiennent les deux mots dans n’importe quel ordre, enchaînez deux recherches avec un pipe : grep -i payment app.log | grep -i timeout. Dans GNU grep, -P prend en charge les lookaheads, comme dans grep -P "^(?=.*payment)(?=.*timeout)", mais -P est absent du grep par défaut de macOS. Pour trouver des fichiers plutôt que des lignes contenant les deux mots, enchaînez grep -rl avec xargs.
Pourquoi grep ne trouve-t-il rien ?
Vérifiez d’abord les guillemets. Sans guillemets, le shell développe * et $ avant que grep ne voie le motif : entourez-le donc toujours de guillemets doubles, ou de guillemets simples s’il contient $. Vérifiez ensuite la syntaxe : en grep simple, + ? et | sont des caractères ordinaires, sauf si vous ajoutez -E. Enfin, un point correspond à n’importe quel caractère : cherchez donc un numéro de version littéral avec grep -F "1.2.3".
Les fichiers avec des fins de ligne Windows cassent les motifs ancrés avec $, car chaque ligne se termine par un retour chariot invisible. Faites-le correspondre avec grep -P "foo\r?$" ou convertissez d’abord le fichier avec dos2unix. Si grep affiche « binary file matches », il a trouvé un octet NUL : ajoutez -a pour traiter le fichier comme du texte. Testez le motif sur un exemple de texte ici, ou dans le Testeur de regex, avant de l’exécuter sur de vrais fichiers.
Équivalents ripgrep des options grep courantes
La plupart des options sont identiques dans les deux : -i, -w, -v, -c, -l, -o, -m et les options de contexte -A, -B et -C. Les différences piègent souvent. Dans un terminal, ripgrep affiche les numéros de ligne par défaut : -N les masque. Pour masquer les noms de fichiers, grep utilise -h mais ripgrep utilise -I, alors que dans grep, -I signifie ignorer les fichiers binaires. Pour suivre les liens symboliques, grep utilise -R et ripgrep -L.
ripgrep cherche récursivement et ignore les fichiers cachés et tout ce qui figure dans .gitignore ; --hidden et --no-ignore désactivent ce comportement. Au lieu de --include et --exclude, il a une seule option : rg -g "*.py" TODO ne cherche que dans les fichiers Python, et un glob qui commence par ! exclut. La commande générée le met entre guillemets simples, pour que bash ne traite pas le ! comme une référence à l’historique. Avec -S, la casse intelligente, un motif en minuscules ignore la casse et un motif avec des majuscules la respecte. grep n’a pas de casse intelligente : la commande grep utilise donc -i à la place.
Quelque chose ne fonctionne pas, ou un résultat semble faux ? Signaler un problème avec cet outil