GNU ed
Introduction
Quel que soit le système Unix que vous utilisez, il existe un certain nombre d'outils que vous êtes sûr de retrouver quelles que soient les circonstances. Parmi ceux-ci, l'éditeur ed est probablement l'une des applications maitresse que tout bon administrateur se doit de maîtriser, pour le cas où...
Utiliser ed, sans rire ?
La plupart des utilisateurs de GNU.Linux ou BSD considèrent d'avantage ed comme un binaire de collection que comme une véritable application, et pourtant il s'agit bien d'un éditeur. Il n'est certes pas très user friendly, mais tout le monde n'a pas la chance de disposer d'un processeur i486 avec plus de 16 Mo de RAM...
Plus sérieusement, il arrive de se retrouver devant un système obsolète ne disposant même pas de vi, et dans bien des situations il peut devenir nécessaire de disposer d'un éditeur viable sous la main. ed se révèle alors comme la constante salvatrice, étant donné que quel que soit le système en question vous serez assuré de l'y retrouver. De plus, mais là il s'agit plutôt d'une remarque personelle, cet outil peut permettre de manipuler rapidement et aisément des fichiers volumineux, ce qui n'est pas toujours le cas avec emacs par exemple...
Cet article n'a pour but que de vous présenter les bases de l'éditeur afin que vous soyez à même de modifier comme bon vous semble tout fichier textuel en l'utilisant.
Débuter avec ed
Principe de fonctionnement
Et oui, si vous avez déjà tenté d'utiliser ed comme ça, vous avez été sûrement aperçu un enchevêtrement de points d'interrogation vous signifiant que l'éditeur ne comprenait rien à vos commandes. Ce qui est tout à fait normal. En effet, ed est un éditeur ligne à ligne, c'est à dire qu'au lieu de manipuler des caractères vous agissez directement sur les lignes de texte du fichier.
Ouverture de fichiers (e)
Avant toute chose, le fichier ouvert devra déjà exister sur votre disque, même s'il s'agit d'un fichier nul. Ainsi, pour ouvrir un nouveau fichier TEST.TXT, vous devrez d'abord le créer en utilisant l'appel touch :
touch TEST.TXT ed TEST.TXT
À l'ouverture, ed fait une copie en mémoire du fichier, ce qui signifie que toute modification faite dans l'éditeur sera perdue si vous oubliez de sauvegarder. Il est également possible d'ouvrir un fichier une fois que l'éditeur est lancé : pour ce faire, il vous suffit d'utiliser la commande interne e :
touch TEST1.TXT touch TEST2.TXT ed TEST1.TXT # L'éditeur est lancé # Ouverture de TEST2.TXT e TEST2.TXT
Comme vous pouvez le constater, ed dispose d'un jeu d'appels internes, comme e vu ci-dessus. C'est en utilisant ces appels que vous pourrez sauvegarder, insérer du texte ou quitter l'application. Pour l'instant, l'éditeur n'affiche pas le texte édité, ce qui peut décourager les débutants : nous allons donc découvrir comment naviguer au sein de notre fichier texte.
Deplacement dans le fichier
Considérons un fichier de test TEST.TXT :
Ligne 1 Ligne 2 pattern pattern2
Se déplacer au sein d'un fichier en cours d'édition n'est pas très compliqué puisqu'il suffit d'entrer le numéro de ligne pour s'y déplacer et en afficher le contenu. Ainsi, taper "1" et valider avec le fichier d'exemple ci-dessus affichera Ligne 1 , et la ligne courante sera la première ligne. Par la suite, appuyer sur entrée vous fera passer à la ligne suivante.
Si vous souhaitez vous déplacer cinq lignes au-dessous de la ligne actuelle, il suffit de taper "+5". Dans l'autre sens, "-5" fonctionne aussi : avec l'exemple ci-dessus, taper "1", puis "+2", puis "-1" vous conduira à la deuxième ligne. Pour afficher le contenu de la ligne courante, l'entrée "." (point) suffit. A noter aussi que pour vous déplacer à la dernière ligne du fichier, vous pouvez utiliser "$" (dollar) de la même manière qu'avec les entiers ci-avant.
De toutes manières, si l'éditeur ne comprend pas vos instructions il vous en fera part via un magnifique "?" ! En résumé, voici un petit mémo à propos du déplacement (n est un entier) :
Méthodes de déplacement :
- n : se déplacer à la ligne n.
- +n : se déplacer n lignes plus bas.
- -n : se déplacer n lignes plus haut.
- . : afficher le contenu de la ligne actuelle.
- $ : se déplacer à la dernière ligne.
Affichage de lignes (p, n)
Vous aurez sûrement besoin d'afficher le contenu de plusieures lignes de fichier en même temps ou, grand luxe, d'afficher l'intégralité du fichier dans votre terminal. Pour ce faire, vous pouvez utiliser les commandes p ou n précédées des numéros de lignes de début et de fin : la commande p en affichera le contenu, la commande n fera de même en numérotant les lignes. Ainsi :
- 6p : affiche la ligne 6.
- 3,7p : affiche les lignes 3 à 7.
- 1,$n : affiche toutes les lignes du fichier avec numérotation.
Comme vous pouvez le remarquer, la variable $ peut servir ici aussi, et en règle générale elle vous sera utile lors de la plupart des manipulations de lignes.
Edition du contenu
Il est bien d'être en mesure d'afficher tout ou partie du contenu du fichier, mais il est encore plus pratique de pouvoir l' éditer : insertion, suppression et manipulation de lignes seront les prochaines étapes de cette découverte.
Insertion de lignes (a, c, i)
Il existe trois manières d'insérer des lignes à votre fichier : le mode append (a) qui insère le contenu après la ligne courante, le mode change (c) qui remplace le contenu de la ligne courante et le mode insert (i) qui insère avant la ligne courante.
Ainsi, en appuyant sur a suivi d'entrée, l'intégralité du texte que vous taperez sera insérer après la ligne courante. Vous ne pourrez quitter le mode append qu'en entrant une ligne ne comportant qu'un point. Exemple :
1,$p Ligne 1 Ligne 2 pattern pattern2 2 # Déplacement à la ligne 2 . # Affichage de la ligne Ligne 2 a # Passage en mode append Ligne 3 Ligne 4 . 1,$p Ligne 1 Ligne 2 Ligne 3 Ligne 4 pattern pattern2 q
Le mode change, activé par l'appel c, s'utilise exactement de la même façon que le mode append, si ce n'est que le contenu tapé sera inséré à la place de la ligne courante, et non après. Il en va de même pour le mode insert (i) où le contenu est ajouté avant la ligne courante.
Suppression de lignes (d)
Supprimer une ligne se fait via la commande d, qui s'emploie de la même manière que p et n vus ci-dessus. Ainsi, supprimer les lignes 3 à 4 du fichier s'effectue de la façon suivante :
1,$p Ligne 1 Ligne 2 Ligne 3 Ligne 4 pattern pattern2 3,4d 1,$p Ligne 1 Ligne 2 pattern pattern2 q
Manipulation de lignes (m, t, j)
ed permet de manipuler simplement les lignes du fichier traité : copie, déplacement ou concaténation font partie des opérations courantes.
Déplacement (m)
Pour effectuer un couper-coller d'une ligne, on utilise la commande m précédée du numéro de ligne à couper (ligne courante si vide) et suivie du numéro de la ligne après laquelle coller. Ainsi, pour couper la ligne 3 et la déplacer après la ligne 6, on utilise :
3m6 # La ligne 3 devient la ligne 7 2m1 # N'a aucun effet
Copie (t)
La commande de copie est t et s'emploie de la même manière que la commande de déplacement vue ci-dessus. A noter que, pour déplacer ou copier une ligne en tout début du texte, c'est-à-dire afin qu'elle devienne la ligne 1, on est autorisé à utiliser le numéro de ligne 0. Ainsi :
3t6 # Copie la ligne 3 après la ligne 6 2t0 # Copie la ligne 2 avant la ligne 1
Concaténation (j)
Pour concaténer plusieures lignes en une seule, on utilise la commande j. Celle-ci s'emploie de la même manière que p ou n, si ce n'est que le numéro de la première ligne doit être inférieur au numéro qui le suit. Ceci donne les exemples suivants. A noter que, dans le cas du premier, la ligne 2 sera le résultat de la concaténation des lignes 2 à 6, la ligne 7 devenant la ligne 4.
2,6j # Concaténation en 2 9,2j # N'a aucun effet
Autres commandes utiles
Il existe quatre fonctions courantes à connaître : en premier lieu, la fonction w qui vous permet d'enregistrer le fichier édité - à ne pas oublier, faute de quoi toutes les modifications seront perdues. Aussi, pour quitter proprement l'éditeur, vous pourrez utiliser la fonction q. ed dispose aussi d'un puissant UNDO, à savoir la fonction u qui annule l'opération précédente. Enfin, pour exécuter un appel shell, vous pouvez utiliser la fonction ! de la même manière que sous vi (très pratique pour compiler du code en cours d'édition). [[:3 Fonctions utiles (w, u, !, q) : ]]
- w TEST.TXT : sauvegarde de TEST.TXT.
- u : annuler la dernière opération.
- ! touch TEST.TXT : appel shell à `touch TEST.TXT`.
- q : quitter l'éditeur.
Expressions rationnelles
De la même manière que dans vi, ed utilise un système simple d'expressions rationnelles - parfois abusivement nommées expressions "régulières" - afin de permettre la recherche et le remplacement de patrons dans le fichier courant.
Affichage et recherche
Pour rechercher une expression voulue en dessous de la ligne courante, il suffit d'encadrer le modèle par des doubles slashes : /pattern/ recherchera ainsi les prochaines occurrences du patron "pattern" dans le fichier. A l'inverse, pour recherche les occurences précédentes, il faudra utiliser des points d'interrogation en lieu et place des slashes.
1,$p Ligne 1 Ligne 2 pattern pattern2 1 /pattern/ pattern /pattern/ pattern2 ?pattern?/ pattern q
En précédent les slashes par un g, vous pourrez également afficher en une passe toutes les occurences de l'expression fournie :
1,$p Ligne 1 Ligne 2 pattern pattern2 1 g/pattern/ pattern pattern2 q
Remplacement
Remplacer une expression par une autre se fait de la même manière que sous vi, via une expression de la forme : s/old/new/g, où old est l'expression à remplacer, new l'expression remplaçante. Le caractère 'g' en fin de ligne spécifie que le remplacement s'applique à tout le fichier, la commande 's' est l'appel à la fonction de remplacement. Ainsi, l'exemple suivant remplacer "pattern" par "modele" dans le fichier de test :
1,$p Ligne 1 Ligne 2 pattern pattern2 1 s/pattern/modele/g 1,$p Ligne 1 Ligne 2 modele modele2 q
Conclusion
Ce court article vous a présenté les principales commandes à connaître pour comprendre et maîtriser l'éditeur ed. Si son fonctionnement diffère des éditeurs classiques, il n'en demeure pas moins un outils puissant et disponible sur tout système Unix : il arrive même que l'on y prenne goût !
Article rédigé le 12 Janvier 2006, révisé le 12 Mai 2007.
Sur le web
La page officielle de GNU ed n'a pas grand intérêt, par contre cette petite parodie de man prête à sourire, surtout pour les ex-novices que vous êtes désormais.