🔍 Grep & Sed
Recherche et manipulation de texte en ligne de commande : les outils indispensables pour traiter fichiers et flux.
Grep et Sed sont les couteaux suisses du traitement de texte. Grep trouve ce que tu cherches, Sed le transforme. Maîtriser ces deux outils te fera gagner un temps précieux au quotidien.
Grep - Recherche de texte
Recherches de base
# Recherche simple (sensible à la casse)
grep "error" app.log
# Insensible à la casse
grep -i "error" app.log
# Recherche récursive dans dossier
grep -r "function" src/
# Recherche dans fichiers spécifiques
grep "TODO" *.js *.ts
# Compter les occurrences
grep -c "ERROR" app.logOptions essentielles
# Afficher numéros de ligne
grep -n "pattern" fichier.txt
# Inverser la recherche (lignes SANS le pattern)
grep -v "DEBUG" app.log
# Contexte : lignes avant/après
grep -A 3 "error" app.log # 3 lignes après
grep -B 2 "error" app.log # 2 lignes avant
grep -C 5 "error" app.log # 5 lignes avant et après
# Uniquement les noms de fichiers qui contiennent le pattern
grep -l "function" *.js
# Afficher seulement les parties qui matchent
grep -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" emails.txtExpressions régulières
# Expressions régulières étendues (-E ou egrep)
grep -E "(ERROR|WARN|CRITICAL)" app.log
# Début/fin de ligne
grep "^#" config.txt # lignes commençant par #
grep "\.js$" filelist # lignes finissant par .js
# Classes de caractères
grep "[0-9]\{3\}" numbers.txt # exactement 3 chiffres
grep "[A-Z]" text.txt # au moins une majuscule
# Quantificateurs
grep -E "go{2,5}gle" text.txt # g suivi de 2 à 5 o, puis gle
grep -E "colou?r" text.txt # color ou colourPatterns courants
# Adresses email
grep -E "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" fichier.txt
# Adresses IP
grep -E "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" access.log
# URLs HTTP/HTTPS
grep -E "https?://[^\s]+" texte.txt
# Numéros de téléphone (format français)
grep -E "0[1-9]([-. ]?[0-9]{2}){4}" contacts.txt
# Dates format YYYY-MM-DD
grep -E "\b[0-9]{4}-[0-9]{2}-[0-9]{2}\b" dates.txtCombinaisons avec d’autres commandes
# Avec ps : trouver des processus
ps aux | grep -i "nginx"
# Avec find : chercher dans des fichiers spécifiques
find . -name "*.log" -exec grep -l "ERROR" {} \;
# Avec history : rechercher dans l'historique
history | grep "git"
# Pipeline multiple
cat access.log | grep "POST" | grep -v "healthcheck" | wc -l
# Sauvegarder les résultats
grep "ERROR" app.log > errors.txt
grep "WARN" app.log >> errors.txtSed - Stream Editor
Substitution de base
# Substitution simple (remplace première occurrence par ligne)
sed 's/ancien/nouveau/' fichier.txt
# Substitution globale (toutes les occurrences par ligne)
sed 's/ancien/nouveau/g' fichier.txt
# Insensible à la casse
sed 's/ancien/nouveau/gI' fichier.txt
# Modifier le fichier en place (DANGER !)
sed -i 's/ancien/nouveau/g' fichier.txt
# Backup automatique avec -i
sed -i.bak 's/ancien/nouveau/g' fichier.txt # crée fichier.txt.bakL’option -i modifie directement le fichier. Teste toujours sans -i d’abord, ou utilise -i.bak pour garder une sauvegarde.
Options importantes
# Mode silencieux avec affichage sélectif (-n + p)
sed -n '1,5p' fichier.txt # affiche lignes 1 à 5
sed -n '/error/p' app.log # affiche lignes contenant "error"
# Multiple substitutions
sed 's/ancien1/nouveau1/g; s/ancien2/nouveau2/g' fichier.txt
# Utiliser un délimiteur différent (pratique pour les chemins)
sed 's|/ancien/chemin|/nouveau/chemin|g' config.txt
sed 's#/var/log#/var/newlog#g' config.txtSuppression de lignes
# Supprimer une ligne spécifique
sed '3d' fichier.txt # supprime ligne 3
# Supprimer une plage de lignes
sed '5,10d' fichier.txt # supprime lignes 5 à 10
# Supprimer les lignes vides
sed '/^$/d' fichier.txt
# Supprimer les lignes de commentaire
sed '/^#/d' config.txt
# Supprimer les lignes contenant un pattern
sed '/error/d' app.log
# Supprimer la dernière ligne
sed '$d' fichier.txtInsertion et ajout
# Insérer avant une ligne (i)
sed '3i\Nouvelle ligne avant ligne 3' fichier.txt
# Ajouter après une ligne (a)
sed '5a\Nouvelle ligne après ligne 5' fichier.txt
# Insérer au début du fichier
sed '1i\Première ligne' fichier.txt
# Ajouter à la fin du fichier
sed '$a\Dernière ligne' fichier.txt
# Insérer avant chaque ligne contenant un pattern
sed '/error/i\--- ERREUR ---' app.logAdressage avancé
# Par numéro de ligne
sed '3s/ancien/nouveau/g' fichier.txt # ligne 3 uniquement
sed '1,5s/ancien/nouveau/g' fichier.txt # lignes 1 à 5
# Par pattern
sed '/error/s/ancien/nouveau/g' app.log # lignes contenant "error"
# Plage entre deux patterns
sed '/start/,/end/s/ancien/nouveau/g' fichier.txt
# Lignes paires/impaires
sed '1~2s/^/ impair: /' fichier.txt # lignes impaires (1,3,5...)
sed '2~2s/^/ pair: /' fichier.txt # lignes paires (2,4,6...)
# Depuis une ligne jusqu'à la fin
sed '10,$s/ancien/nouveau/g' fichier.txtCas d’usage courants
Nettoyage logs
Nettoyer des fichiers de logs
# Extraire uniquement les lignes d'erreur avec timestamp
sed -n '/ERROR/p' app.log | head -20
# Anonymiser des adresses IP dans un log
sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/XXX.XXX.XXX.XXX/g' access.log
# Supprimer les timestamps pour analyse
sed 's/^[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}//' app.log
# Mettre en majuscules les messages d'erreur
sed 's/\(ERROR\)/\U\1/gI' app.logCombinaisons avancées
Grep + Sed
Grep et Sed ensemble
# Trouver et remplacer dans des fichiers spécifiques
grep -l "ancienne_version" *.php | xargs sed -i 's/ancienne_version/nouvelle_version/g'
# Extraire des lignes et les transformer
grep "ERROR" app.log | sed 's/.*ERROR \([0-9]*\).*/\1/' | sort -n
# Nettoyer les résultats d'une recherche
ps aux | grep "nginx" | sed 's/ \+/ /g' | cut -d' ' -f2,11Astuces et alternatives
Pour des recherches plus rapides sur de gros projets, découvre ripgrep (rg) ! C’est l’outil moderne recommandé pour la recherche de texte : plus rapide, intelligent et avec des fonctionnalités avancées comme le respect automatique du .gitignore.
# Alternatives modernes (si installées)
rg "pattern" dossier/ # plus rapide que grep -r
ag "pattern" dossier/ # autre alternative rapide
# Grep avec couleurs par défaut
export GREP_OPTIONS='--color=auto'
alias grep='grep --color=auto'
# Sed avec syntaxe étendue (plus lisible)
sed -E 's/(pattern1|pattern2)/remplacement/g' fichier.txtRappels rapides
| Usage | Commande |
|---|---|
| Recherche simple | grep "pattern" fichier.txt |
| Recherche insensible | grep -i "pattern" fichier.txt |
| Recherche récursive | grep -r "pattern" dossier/ |
| Substitution simple | sed 's/ancien/nouveau/g' fichier.txt |
| Substitution en place | sed -i 's/ancien/nouveau/g' fichier.txt |
| Supprimer lignes vides | sed '/^$/d' fichier.txt |
| Compter les occurrences | grep -c "pattern" fichier.txt |
| Afficher avec contexte | grep -C 3 "pattern" fichier.txt |