grep : Édition de texte en ligne de commande
grep recherche et filtre. Il ne modifie rien. Cet article explique ce que grep fait réellement, comment le combiner avec d'autres commandes pour modifier des fichiers, et pourquoi cette combinaison vous donne plus de contrôle qu'une modification directe ne le ferait jamais.
VEREISTEN
- Een Linux- of Unix-omgeving met grep geïnstalleerd (grep 3.11 of nieuwer).
- Toegang tot een terminal.
- Basiskennis van de commandoregel: navigeren, bestanden bekijken.
- Optioneel: een Franstalige manpage, beschikbaar via
man grepin Debian trixie.
STAPPEN
1. Zoek een patroon in een bestand.
La forme la plus simple : grep "fout" logfile.txt affiche toutes les lignes de logfile.txt qui contiennent le mot "fout". Grep lit le fichier, filtre les lignes et les imprime dans le terminal. L'original reste intact.
grep "fout" logfile.txt
C’est une opération en lecture seule. Vous ne pouvez rien casser avec, ce qui en fait une première étape sûre dans toute analyse.
2. Redirigez la sortie vers un nouveau fichier.
grep imprime vers stdout. Avec >, tu captures cette sortie et tu l'écris dans un fichier. Ainsi, tu crées une copie filtrée sans modifier l'original.
grep "fout" logfile.txt > fouten.txt
Attention : > écrase un fichier existant. Si vous voulez ajouter à un fichier existant, utilisez >>. L’original reste intact, ce qui rend cette approche adaptée pour diviser des journaux en toute sécurité.
3. Combineer grep met pipes.
De echte kracht zit in de pipe (|). Die stuurt de output van het ene commando als invoer naar het volgende. Zo filter je niet alleen bestanden, maar ook de output van andere commando's.
sudo dmesg | grep net
Cette commande n’affiche que les messages du noyau contenant le mot « net ». En cas de problèmes réseau, vous voyez directement les lignes pertinentes au lieu de la sortie complète de dmesg. Cela fonctionne avec n’importe quelle commande qui écrit sur la sortie standard : ps, ss, journalctl, et ainsi de suite.
4. Gebruik reguliere expressies voor preciezere patronen.
Grep accepteert reguliere expressies. Waar grep "fout" alleen het exacte woord vindt, zoekt grep "^fout" naar regels die met "fout" beginnen. Het dakje (^) is een anker dat het begin van een regel markeert.
grep "^fout" logfile.txt
Les expressions régulières font de grep un instrument de précision. Vous pouvez rechercher des limites de mots, des répétitions ou des classes de caractères. La syntaxe est étendue, mais les bases s’apprennent en un après-midi.
5. Toon alleen het aantal overeenkomsten.
Parfois, tu ne veux pas savoir quelles lignes correspondent, mais combien il y en a. Le drapeau -c les compte.
grep -c "fout" logfile.txt
C'est plus rapide que de compter dans un éditeur et adapté au scripting. Combinez-le avec un pipe pour compter dans la sortie d'une autre commande.
6. Zoek recursief in een directorystructuur.
Met -r scant grep alle bestanden in een directory en zijn subdirectories. Dit is onmisbaar bij het doorzoeken van configuratiemappen of broncode.
grep -r "timeout" /etc/
Grep affiche pour chaque correspondance le nom du fichier et la ligne. Attention : -r ne suit pas les liens symboliques. Utilisez -R si vous voulez aussi les suivre. Cela prend plus de temps, mais c'est plus approfondi.
7. Toon context rond een overeenkomst.
Une ligne isolée ne dit souvent pas grand-chose. Avec -C 3, grep affiche trois lignes avant et après chaque correspondance. Ainsi, vous voyez le contexte d’un message d’erreur sans devoir ouvrir tout le fichier.
grep -C 3 "fout" logfile.txt
C’est standard dans toute analyse de logs. Si tu veux seulement les lignes après (-A) ou avant (-B), tu peux utiliser ces drapeaux séparément.
8. Wijzig een bestand via een omweg.
Grep zelf kan geen bestand wijzigen. Maar door de gefilterde output naar een tijdelijk bestand te schrijven en dat terug te kopiëren, bereik je hetzelfde effect.
grep -v "debug" logfile.txt > tmp.txt && mv tmp.txt logfile.txt
Le drapeau -v inverse la correspondance : grep affiche tout sauf les lignes contenant "debug". Le résultat est écrit dans tmp.txt, et mv remplace l'original. C'est une implémentation manuelle de ce que sed fait en une seule étape — pour des opérations ponctuelles, c'est parfait. Pour des opérations répétées, sed est plus rapide et moins sujet aux erreurs.
VERIFICATIE
Controleer of grep correct werkt:
grep --version
Cela affiche la version, par exemple grep (GNU grep) 3.11. Pour vérifier si un filtre est correctement appliqué :
grep -c "debug" logfile.txt
Si cela affiche 0 après l’étape 8, toutes les lignes contenant "debug" ont été supprimées. Vous pouvez aussi utiliser diff pour comparer l’original et le résultat :
diff logfile.txt tmp.txt
Pas de sortie signifie que les fichiers sont identiques — ou que grep n’a rien trouvé.
VEELGESTELDE PROBLEMEN
1. Grep ne trouve rien, mais le texte est bien là.
Vérifiez si le motif n'est pas une expression régulière que vous vouliez prendre au pied de la lettre. Le point (.) correspond à n'importe quel caractère, et l'accent circonflexe (^) marque le début d'une ligne. Utilisez grep -F pour traiter le motif littéralement, ou échappez les caractères spéciaux avec un backslash.
2. Grep se plaint de "Binary file matches".
Grep reconnaît les fichiers binaires et refuse d'afficher la sortie. Utilisez grep -a pour traiter le fichier comme du texte, ou grep -I pour ignorer les fichiers binaires. La première option est risquée avec de gros fichiers binaires — la sortie peut être illisible.
3. La sortie de grep est trop volumineuse pour être lue.
Redirigez la sortie vers less pour parcourir, ou vers un fichier pour analyser plus tard. grep "erreur" fichierlog.txt | less est la solution la plus rapide pour les sorties longues.
---
Grep n'est pas un traitement de texte. C'est un filtre. Et les filtres sont les plus précieux lorsqu'on les combine : avec des pipes, avec la redirection, avec d'autres outils. L'histoire n'aide pas ici — que grep soit issu de l'éditeur ed dans les années soixante explique le nom g/re/p, mais pas pourquoi vous l'utiliseriez aujourd'hui. Ce qui compte : grep se trouve sur chaque serveur, dans chaque conteneur, sur chaque appareil réseau. Il fait partie de la norme POSIX et est présent sur pratiquement chaque installation Linux.
Celui qui maîtrise grep parcourt des journaux en secondes là où un éditeur prend des minutes. Celui qui combine grep avec sed ou awk modifie des fichiers sans les ouvrir. La question n'est pas de savoir si vous avez besoin de grep. La question est de savoir combien de temps vous continuerez à travailler sans lui.