Unix / Linux - Expressions régulières avec SED
Salut à toi, futurs magiciens de la ligne de commande ! Aujourd'hui, nous plongeons dans le monde magique des expressions régulières (regex) et de la puissante commande SED sous Unix/Linux. Attachez vos ceintures, car nous allons entreprendre une aventure palpitante qui va transformer la manière dont vous manipulez du texte !
Appel de sed
Commençons par les bases. SED, qui signifie "Stream Editor", est un outil de traitement de texte puissant. Pour l'utiliser, nous tapons simplement "sed" suivi de nos commandes. C'est comme invoquer un génie manipulateur de texte !
sed 'commande' nomdefichier
Par exemple :
sed 's/hello/bonjour/' salutations.txt
Cette commande remplace "hello" par "bonjour" dans le fichier salutations.txt. Simple, n'est-ce pas ?
Syntaxe générale de sed
La syntaxe générale de sed est comme un sortilège magique :
sed OPTIONS... [SCRIPT] [FICHIER...]
Ne vous inquiétez pas si cela paraît intimidant. Nous allons le démonter morceau par morceau, comme résoudre un puzzle amusant !
Supprimer toutes les lignes avec sed
Vous souhaitez faire disparaître tout le texte d'un fichier ? Sed peut le faire ! Voici comment :
sed 'd' nomdefichier
Cela supprime toutes les lignes du fichier. C'est comme utiliser une gomme sur votre carnet numérique !
Adresses de sed
Les adresses dans sed sont comme des coordonnées GPS pour votre texte. Elles indiquent à sed où effectuer son magie. Voici quelques exemples :
sed '2d' fichier.txt # Supprime la 2ème ligne
sed '/motif/d' fichier.txt # Supprime les lignes contenant 'motif'
Plage d'adresses de sed
Parfois, nous voulons jeter notre sort sur une plage de lignes. Voici comment :
sed '2,5d' fichier.txt # Supprime les lignes 2 à 5
sed '2,$d' fichier.txt # Supprime de la ligne 2 à la fin du fichier
Commande de substitution
La commande de substitution est la spécialité de sed. C'est comme "trouver et remplacer" sur stéroïdes !
sed 's/ancien/nouveau/' fichier.txt
Cela remplace la première occurrence de "ancien" par "nouveau" sur chaque ligne.
Fanions de substitution
Les fanions sont comme des power-ups pour vos commandes de substitution. Voici un tableau des fanions courants :
Fanion | Description |
---|---|
g | Remplacer toutes les occurrences, pas seulement la première |
i | Ignorer la casse |
p | Imprimer la ligne modifiée |
w | Écrire le résultat dans un fichier |
Exemple :
sed 's/chat/chien/g' animaux.txt
Cela remplace toutes les occurrences de "chat" par "chien".
Utilisation d'un séparateur de chaîne alternatif
Parfois, votre texte contient beaucoup de barres obliques. Pas de souci ! Nous pouvons utiliser des séparateurs différents :
sed 's#/usr/local/bin#/common/bin#' chemins.txt
Ici, nous utilisons '#' comme notre séparateur au lieu de '/'.
Remplacement par un espace vide
Vous souhaitez faire disparaître du texte sans laisser de trace ? Voici comment :
sed 's/indésirable//g' fichier.txt
Cela supprime toutes les occurrences de "indésirable" du fichier.
Substitution d'adresses
Nous pouvons combiner des adresses avec une substitution pour une chirurgie textuelle précise :
sed '3,6s/foo/bar/g' fichier.txt
Cela remplace toutes les occurrences de "foo" par "bar", mais seulement sur les lignes 3 à 6.
Commande de correspondance
La commande de correspondance est comme un projecteur, éclairant les lignes qui nous intéressent :
sed -n '/motif/p' fichier.txt
Cela imprime uniquement les lignes contenant "motif".
Utilisation des expressions régulières
Maintenant, nous entrons dans la véritable magie ! Les expressions régulières sont comme des jokers sur stéroïdes. Voici un exemple simple :
sed -n '/^The/p' histoire.txt
Cela imprime toutes les lignes commençant par "The".
Correspondance de caractères
Les expressions régulières ont des caractères spéciaux qui agissent comme des métamorphes :
Caractère | Signification |
---|---|
. | Tout caractère simple |
* | Zéro ou plusieurs occurrences du caractère précédent |
^ | Début de ligne |
$ | Fin de ligne |
Exemple :
sed -n '/c.t/p' animaux.txt
Cela correspond à "cat", "cot", "cut", etc.
Mots-clés de classes de caractères
Les classes de caractères sont comme des équipes de caractères. Voici quelques joueurs MVP :
Classe | Correspond à |
---|---|
[:alpha:] | Caractères alphabétiques |
[:digit:] | Caractères numériques |
[:alnum:] | Caractères alphanumériques |
Exemple :
sed -n '/[[:digit:]]/p' données.txt
Cela imprime les lignes contenant n'importe quel chiffre.
Référencement avec le symbole et
L'ampersand (&) est comme un miroir magique, reflétant ce qui a été correspondu :
sed 's/[0-9]/(&)/' nombres.txt
Cela met des parenthèses autour de chaque chiffre.
Utilisation de plusieurs commandes sed
Vous souhaitez lancer plusieurs sorts en une fois ? Utilisez l'option -e :
sed -e 's/foo/bar/g' -e 's/baz/qux/g' fichier.txt
Cela effectue deux substitutions en un seul coup !
Références arrières
Les références arrières sont comme des machines à temps, nous permettant de réutiliser des parties de la correspondance :
sed 's/\(.*\):\([^:]*\)/\2:\1/' noms.txt
Cela échange le texte avant et après un deux-points.
Et voilà, mes chers élèves ! Nous avons voyagé à travers le pays de sed et des expressions régulières. Souvenez-vous, la pratique rend parfait. Alors, allaitez et manipulez le texte comme les sorciers de la ligne de commande que vous devenez ! Bon codage !
Credits: Image by storyset