L’ombre a ses outils. Certains sont fins comme des lames de rasoir, pour découper, transformer, remplacer. D’autres sont des vérins, pour garantir que votre scénario ne se brise pas à la première erreur. Maîtrisez cet arsenal, et vous ne serez plus un simple exécutant. Vous serez un artisan du chaos ou de l’ordre. Au choix.
12.1 Outils texte
Quand grep ne suffit plus, on sort les scalpels.
-
sed: Le transformeur silencieux. L’outil de remplacement, de suppression, de manipulation de flux. Il ne modifie pas par défaut, il montre ce qui serait modifié.# Remplacer un mot dans un fichier, EN PLACE (option -i). Puissant. Dangereux. $ sed -i 's/Moriarty/Redacted/g' dossier_enquete.md # 's/ancien/nouveau/g' -> substitue globalement. # Supprimer toutes les lignes contenant "DRAFT" $ sed '/DRAFT/d' rapport.txt > rapport_final.txt # Extraire les lignes 10 à 20 d'un fichier $ sed -n '10,20p' journal.logLe pouvoir de
sedréside dans les expressions régulières. Un couteau suisse pour le texte. -
awk: Le couteau de dissection. Plus qu’un outil, un langage. Parfait pour traiter des données en colonnes, des logs structurés.# Afficher la première et dernière colonne d'un fichier CSV $ awk -F',' '{print $1, $NF}' contacts.csv # -F',' définit la virgule comme séparateur. $NF = dernière colonne (Number of Fields). # Filtrer les lignes où la 3ème colonne (montant) > 1000 $ awk '$3 > 1000 {print $0}' transactions.log # Compter le nombre de processus par utilisateur (depuis 'ps aux') $ ps aux | awk '{print $1}' | sort | uniq -c | sort -rnawkvoit le monde en enregistrements (lignes) et champs (colonnes). Sa syntaxe{action}est redoutablement efficace. -
cut,sort,uniq: La brigade des petits travaux.cut: Découpe des colonnes par délimiteur ou par position.$ cut -d':' -f1,7 /etc/passwd # Affiche login et shell des utilisateurs (délimiteur ':', champs 1 et 7).sort: Trie. La base.$ sort -u liste_cibles.txt # Trie et supprime les doublons (-u pour unique). $ sort -nr -k2 donnees.txt # Trie par 2ème colonne (-k2), en ordre numérique inversé (-nr).uniq: Supprime les doublons consécutifs. Toujours précédé d’unsort.$ cat logs.txt | cut -d' ' -f1 | sort | uniq -c # Découpe la 1ère colonne (IP), trie, puis compte (-c) le nombre de fois que chaque IP apparaît.
12.2 Scripts robustes – Les Options set
Un script qui échoue silencieusement est une trahison. Il faut qu’il crie à la première erreur, qu’il refuse les variables non définies. C’est ce que font ces options, placées en haut de vos scripts.
-
set -e: Arrête le script à la première commande qui échoue (code retour non-zéro). Finie l’exécution zombie après une erreur.#!/bin/bash set -e rm -f /tmp/fichier_vital # Si ça échoue (par ex. permission), le script S'ARRÊTE IMMÉDIATEMENT ici. echo "Cette ligne ne sera jamais atteinte en cas d'échec." -
set -u: Traite les variables non définies comme une erreur. Empêche les bugs subtils où$fichierest vide.#!/bin/bash set -u source="$1" # Si le script est lancé sans argument, $1 est non-défini -> ERREUR et arrêt. cp "$source" /backup/ # Sécurité : on sait que $source a une valeur. -
set -o pipefail: Rend un échec N'IMPORTE OÙ dans un pipe comme un échec global. Sans ça, seul le code de la dernière commande compte.#!/bin/bash set -o pipefail grep "secret" fichier.txt | sort | head -5 # Si `grep` échoue (pas de 'secret'), le pipe échoue, même si `sort` et `head` réussissent.
Le combo gagnant, le holy trinity en début de tout script sérieux :
#!/bin/bash
set -euo pipefail
# Votre code robuste et paranoïaque commence ici.
Cela force la discipline. Le script devient prévisible. Il échoue vite et fort, au lieu de poursuivre son chemin avec des données pourries.
L’arsenal est complet. sed et awk pour remodeler la réalité textuelle. set -euo pipefail pour verrouiller votre propre code contre les failles. Un script qui utilise tout cela n’est plus un simple fichier. C’est une entité fiable, précise, dangereuse. Une arme de précision.