Skip to Content
CLIGrep & Sed

🔍 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.log

Options 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.txt

Expressions 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 colour

Patterns 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.txt

Combinaisons 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.txt

Sed - 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.bak

L’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.txt

Suppression 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.txt

Insertion 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.log

Adressage 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.txt

Cas d’usage courants

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.log

Combinaisons avancées

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,11

Astuces 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.txt

Rappels rapides

UsageCommande
Recherche simplegrep "pattern" fichier.txt
Recherche insensiblegrep -i "pattern" fichier.txt
Recherche récursivegrep -r "pattern" dossier/
Substitution simplesed 's/ancien/nouveau/g' fichier.txt
Substitution en placesed -i 's/ancien/nouveau/g' fichier.txt
Supprimer lignes videssed '/^$/d' fichier.txt
Compter les occurrencesgrep -c "pattern" fichier.txt
Afficher avec contextegrep -C 3 "pattern" fichier.txt