Découvrir trois outils complémentaires pour manipuler du texte en ligne de commande : **grep** (rechercher), **sed** (modifier) et **xargs** (chaîner des commandes).
grep (Global Regular Expression Print) cherche un motif dans un fichier ou une entrée standard.
# Rechercher "error" dans un fichiergrep "error" /var/log/syslog# Recherche insensible à la cassegrep -i "warning" app.log# Afficher les lignes QUI NE contiennent PAS le motifgrep -v "debug" app.log# Afficher le numéro des lignesgrep -n "error" app.log# Recherche récursive dans un répertoiregrep -r "failed" /etc/# Trouver les lignes avec une adresse IPgrep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" logs.txt# Compter le nombre d'occurrencesgrep -c "error" app.log# Afficher 3 lignes avant et après chaque matchgrep -B 3 -A 3 "exception" app.logsed modifie du texte sans ouvrir de fichier. Il applique des transformations ligne par ligne.
# Remplacer la première occurrence de "foo" par "bar" par lignesed 's/foo/bar/' fichier.txt# Remplacer TOUTES les occurrences (drapeau g)sed 's/foo/bar/g' fichier.txt# Modifier le fichier directement (-i)sed -i 's/localhost/127.0.0.1/g' config.txt# Remplacer surplace avec backup (.bak)sed -i.bak 's/old/new/g' config.txt# Supprimer les lignes contenant un motifsed '/temporaire/d' logs.txt# Afficher les lignes 10 à 20sed -n '10,20p' grand_fichier.txt# Ajouter du texte après une lignesed -i '/pattern/a\Nouvelle ligne' fichier.txt# Remplacer par une expression régulièresed -E 's/[0-9]{4}/****/g' fichier.txt# Remplacer tous les "http://" par "https://" dans un fichier HTMLsed -i 's/http:\/\//https:\/\//g' index.html# Supprimer tous les espaces de fin de lignesed -i 's/[[:space:]]*$//' fichier.txtxargs lit des éléments depuis l'entrée standard et les passe comme arguments à une autre commande. Indispensable pour chaîner avec find.
# Compter le nombre de lignes de chaque fichier trouvéfind . -name "*.txt" | xargs wc -l# Supprimer tous les fichiers .tmp trouvésfind . -name "*.tmp" | xargs rm -f# Copier tous les fichiers .conf dans backup/find /etc -name "*.conf" | xargs -I {} cp {} /backup/# Demander confirmation avant chaque suppressionfind . -name "*.log" -mtime +7 | xargs -p rm -f# Lancer 4 processus en parallèlefind . -name "*.jpg" | xargs -P 4 -I {} convert {} -resize 800x600 {}# Rechercher les lignes avec "error", remplacer "old" par "new", sauvegardergrep "error" app.log | sed 's/old/new/g' > app_new.log# Trouver les fichiers modifiés récemment, afficher leur contenufind . -mtime -7 -name "*.txt" | xargs grep -l "TODO"# Nettoyer : trouver les .bak, les compresser, supprimer l'originalfind . -name "*.bak" | xargs gzip && find . -name "*.bak" | xargs rm1. **Recherche simple** — Dans /var/log/syslog, trouve toutes les lignes contenant "sshd".
2. **Remplacement** — Dans un fichier config.txt, remplace "port = 8080" par "port = 443" avec sed.
3. **Chaînage** — Trouve tous les fichiers .log dans /var/log/ qui contiennent "error", puis affiche leurs permissions avec ls -l.
4. **Nettoyage** — Trouve tous les fichiers .tmp de plus de 7 jours et supprime-les avec confirmation.
| Commande | Rôle | Exemple | |
|---|---|---|---|
grep | Rechercher un motif | grep -r "error" /var/log/ | |
sed | Remplacer/modifier | sed 's/foo/bar/g' fichier | |
xargs | Chaîner avec arguments | find . -name "*.txt" \ | xargs rm |
grep -v | Exclure un motif | grep -v "debug" log.txt | |
sed -i | Modifier surplace | sed -i 's/a/b/g' fichier | |
xargs -I | Placeholder | xargs -I {} cp {} /dest/ |
[← Leçon 49 : journalctl](49-journalctl-logs-systemd.html) | [Leçon 51 : sort, uniq et wc](51-sort-uniq-wc.html) | [Sommaire](index.html)