ed, l'éditeur ligne
Description
ed est un éditeur ligne, développé à l’époque des télétypes (TTY). Son utilisation intensive favorise une certaine gymnastique mentale, notamment une mémorisation et une réflexion relativement importante. Il est très peu utilisé de nos jours car il existe d’autres éditeurs permettant une manipulation bien plus aisée des textes. Il est bien moins pratique à utiliser qu’un éditeur plein écran, mais il présente l’avantage de ne nécessiter qu’une très faible bande passante réseau (dans le cas de l’utilisation d’un terminal réseau) puisqu’il n’affiche que ce qu’on lui demande d’afficher. Dans certains cas de saturation de ressources réseau ou CPU, son utilisation est parfois requise car les autres solutions sont quasi systématiquement plus consommatrices. Ces cas sont extrêmement rares de nos jours, mais il arrive parfois que l’on se trouve dans une situation où il est le seul recours, et savoir l’utiliser peut rendre un grand service.
D’autre part, la pratique régulière de ed force la manipulation des expressions régulières, car toute modification d’une ligne doit être exprimée en termes de remplacement de chaîne de caractères (éventuellement...
Rappel de quelques commandes
1. Les différents modes
L’éditeur ed possède deux modes de fonctionnement : le mode commandes et le mode saisie. Après son lancement, il se trouve en mode commandes.
Certaines commandes permettent de passer en mode saisie et d’ajouter du texte au fichier, ou de remplacer du texte présent dans le fichier.
Le caractère . tapé en début de ligne permet de sortir du mode saisie et de repasser en mode commandes.
Toutes les commandes doivent être validées par appui sur la touche [Entrée].
2. Adressage des lignes
ed est un éditeur "ligne" : il manipule des lignes dont il faut lui spécifier les références pour lui indiquer la portée des commandes qu’on lui passe. Cette portée doit précéder immédiatement la commande à exécuter.
Les commandes peuvent s’appliquer à une ligne donnée, ou à un groupe de lignes.
Dans le cas d’une commande portant sur une seule ligne, on spécifie la référence de la ligne à traiter devant la commande. En l’absence de référence, la ligne traitée sera la ligne courante.
Dans le cas d’un groupe de lignes, on spécifie la référence de la première ligne et la référence de la dernière ligne, séparées par une virgule et suivies de la commande à exécuter.
Les références des lignes peuvent être spécifiées sous forme d’expressions contenant des numéros ou des recherches de chaînes utilisant ou non des expressions régulières.
Une référence de ligne peut être utilisée dans une expression arithmétique utilisant les opérateurs - et + afin de référencer une ligne qui précède ou une ligne qui suit la ligne référencée.
La saisie d’une référence de ligne non suivie d’une commande a pour effet de positionner le pointeur de la ligne courante sur la ligne référencée et d’afficher la ligne.
Les manières de spécifier des références de lignes sont nombreuses : se reporter aux ouvrages cités précédemment pour connaître...
Les expressions régulières
1. Généralités
ed ne sait traiter que les expressions régulières basiques.
2. Utilisation du caractère ^
a. Signification
Le caractère ^ en début d’expression spécifie un début de ligne. À l’aide de ce caractère, il est possible de rechercher une chaîne en début de ligne, ou de remplacer une chaîne se trouvant en début de ligne par une autre chaîne (éventuellement vide). Les chaînes recherchées peuvent être exprimées sous forme de chaînes de caractères ou d’expressions régulières.
Si l’on recherche une chaîne commençant par le caractère ^, il faudra enlever au caractère ^ sa signification générique en le faisant précéder d’un antislash.
b. Recherche d’une expression en début de ligne
Syntaxe
/^expr/
?^expr?
Exemple 1
Rechercher en descendant dans le fichier /etc/passwd l’utilisateur mysql à partir du début du fichier :
1
/^mysql:/
Exemple 2
Rechercher en remontant dans le fichier /etc/network/interfaces les lignes contenant la chaîne iface en début de ligne, et rechercher ensuite les deux autres lignes contenant cette chaîne :
?^iface?
??
??
c. Insertion d’une chaîne en début de ligne
Syntaxe
s/^/chaîne_à_insérer/
Exemple
Supposons que l’on veuille commenter les lignes 15 à 26 d’un shell script en plaçant le caractère # en tête de ligne : on utilisera alors la commande suivante :
15,26s/^/#/p
qui doit être interprétée de la façon suivante :
-
15,26 donne la portée de la commande.
-
s appelle la commande de substitution.
-
/ introduit la première expression.
-
^ indique un début de ligne : c’est la première expression à substituer.
-
/ indique la fin de la première expression et le début de la deuxième.
-
# est la chaîne que l’on va substituer à la première expression.
-
/ indique la fin de la deuxième expression.
-
p demande d’afficher les lignes traitées.
d. Substitution d’une expression en début de ligne
Syntaxe...
Exercices
1. Suppression en fin de ligne
Exercice 1
Comment supprimer sur l’ensemble d’un fichier les espaces et tabulations en fin de ligne ?
Solution
1,$s/[]*$//
2. Insertion en début de ligne
Exercice 2
Comment insérer, de la ligne 122 à ligne 137, une tabulation en début de ligne ?
Solution
122,137s/^//
3. Substitution de chaîne
Exercice 3
Comment supprimer dans l’ensemble d’un fichier les espaces figurant devant les tabulations ?
Solution
1,$s/*//g
4. Substitution avec références
a. Exercice 4
Suite à un changement de plan d’adressage IP, comment remplacer dans le fichier /etc/hosts toutes les adresses IP du réseau 10.2.3.0/24 par les mêmes adresses dans le réseau 192.168.27.0/24 ?
Pour les lecteurs qui ne seraient pas familiers avec le réseau, cela revient à remplacer une adresse 10.2.3.x par l’adresse 192.168.27.x.
Solution
1,$s/^10\.2\.3\.\([0-9]*\)/192.168.27.\1/
Le caractère ^ permet de ne pas remplacer des adresses du réseau 110.2.3.0 ni du réseau 210.2.3.0, en spécifiant que la chaîne 10.2.3. doit figurer en début de ligne.
L’antislash devant le caractère . de la chaîne \2\.\3 permet d’éviter que le . ne soit considéré comme un métacaractère, pouvant éventuellement correspondre à un chiffre. Cela empêche que l’expression ne corresponde, par exemple, à 10.243.45 ou 10.203.92.
b. Exercice 5
Comment mettre entre doubles quotes le deuxième champ d’un fichier ?
On prendra comme...