ed est un éditeur de texteligne par ligne pour systèmesUnix. Ce n'est pas un éditeur de texte visuel dans le sens où il ne montre pas le texte en cours d'édition : on ne peut afficher une ligne (ou un groupe de lignes) qu'après l'avoir modifiée. L'interface de ce logiciel est entièrement textuelle : elle ne nécessite qu'un clavier à 53 touches.
ed a été écrit à l'origine par Ken Thompson[1],[2]. Il y a implémenté pour la première fois les expressions rationnelles formalisées par Kleene[3]. Avant cette implémentation, le concept des expressions rationnelles n'était formalisé que dans des publications mathématiques, que Ken Thompson avait lues.
ed a été influencé par un précédent éditeur de l'université de Berkeley, Californie (dans laquelle Ken Thompson a été diplômé), appelé QED[4]. ed a par la suite influencé l'éditeur ex, qui à son tour a conduit à vi. Les commandes Unix non-interactives grep et sed ont été inspirées par certaines utilisations spécifiques mais habituelles de ed. Leur influence est visible dans la conception de langages de programmation tels que awk, qui a lui-même inspiré certains aspects de Perl.
Connu pour son laconisme, ed ne propose pratiquement aucun retour visuel. Par exemple, le message produit lors d'une erreur, ou quand ed veut s'assurer que vous voulez quitter sans enregistrer, est "?". Il n'indique pas le nom du fichier en cours d'édition ou le numéro de la ligne, et ne montre pas le texte résultant d'une modification, à moins d'une demande explicite. Cette pauvreté était tout à fait adaptée aux premières versions d'Unix, quand les consoles étaient des télétypes, les modems étaient lents et les disques durs et RAM étaient onéreux. Mais cet avantage a cessé lorsque les éditeurs interactifs sont devenus la norme.
À présent, ed est rarement utilisé : il a laissé la place aux éditeurs sam, vi et emacs dans les années 1980. Ses commandes ne subsistent pour l'essentiel que dans le filtre-éditeur sed, dans les scripts. ed est disponible sur pratiquement toutes les versions d'Unix et de GNU/Linux. Les personnes qui travaillent avec différentes versions d'Unix connaissent souvent les commandes les plus basiques de ed. En cas de problème, et si le système d'exploitation n'est pas au mieux, ed est le seul éditeur fonctionnel[2]. C'est probablement le seul cas où ed est encore utilisé de manière interactive, à l'exception peut-être des travaux dirigés des étudiants de première année.
Mais les commandes ed sont fréquemment imitées dans les autres éditeurs travaillant ligne par ligne. Par exemple, EDLIN, disponible dans les premières versions de MS-DOS, possède une syntaxe similaire[5], et les éditeurs de texte de nombreux MUD (LPMud et ses descendants par exemple) utilisent une syntaxe semblable à celle de ed. Toutefois, la majorité de ces éditeurs sont limités fonctionnellement.
Une version restreinte appelée red (de l'anglais « restricted ed ») peut seulement modifier les fichiers du répertoire courant et ne peut exécuter aucune commande shell.
Exemple de session interactive
Afin d'illustrer le principe de fonctionnement, voici la transcription d'une session ed. Les caractères gras sont ceux produits par ed, les autres caractères ont été tapés par l'utilisateur :
a
ed est l'editeur standard Unix.
Voici la ligne numero deux.
.
2i
.
1,$l
ed est l'editeur standard Unix.$$Voici la ligne numero deux.$
3s/deux/trois/
1,$l
ed est l'editeur standard Unix.$$Voici la ligne numero trois.$
w texte
65
q
Le résultat est un fichier texte contenant le texte suivant :
ed est l'editeur standard Unix.
Voici la ligne numero trois.
Explication de l'exemple
Cette session débute avec un fichier vide. La commande a ajoute du texte (toutes les commandes de ed sont composées d'une seule lettre). Cette commande place l'éditeur en mode insertion, qui ne prendra fin qu'avec un point saisi seul sur une ligne. Ainsi, les deux lignes saisies avant le point isolé sont dans le tampon du fichier. La commande 2i passe en mode insertion et permet d'insérer du texte (une seule ligne dans cet exemple) avant la ligne numéro 2. Chaque commande peut être préfixée par un numéro de ligne, ce qui la fait agir sur cette ligne.
Dans la commande 1,$l, le l représente la commande list. Cette commande a été préfixée par une plage de lignes, c'est-à-dire deux numéros de ligne séparés par une virgule ($ représente la dernière ligne). En retour, ed donne la liste des toutes les lignes, de la première à la dernière. Ces lignes prennent fin avec le symbole $, afin que les espaces situés en fin de ligne soient visibles.
La commande 3s/deux/trois/ est une commande de substitution (s) appliquée sur la ligne numéro 3. La commande est ensuite composée du texte à remplacer (deux) et du texte à mettre à sa place (trois). Puis les lignes sont à nouveau affichées avec la commande 1,$l, afin de s'assurer que la substitution a bien été effectuée.
La commande w texte écrit le contenu du tampon dans le fichier "texte". ed répond alors 65, qui correspond au nombre de caractères qu'il a écrit dans le fichier. q indique à ed que la session prend fin.
Dans une entrevue de 1985, Bill Joy expliquait que, chez Sun, il utilisait un nouveau programme de publication, appelé interleaf. Lors de visites hors de laboratoires de Sun, il utilisait le bon vieux ed. Malgré l'omniprésence de vi, il ne parvenait jamais à trouver une version qui fonctionne de la manière dont il voulait. Comme ed n'a jamais été modifié, il pouvait compter sur lui pour travailler, sans passer pour un débutant.
Implémentations
GNU ed
GNU ed[6] est l'implémentation de l'éditeur ed par le projet GNU. C'est un logiciel libre distribué sous licence GNU GPL. Il est utilisé comme l'original UNIX pour créer, afficher, modifier et manipuler des fichiers textes, de manière interactive ou via des scripts shell. Le projet est maintenu depuis la fin des années 2000 par Antonio Diaz, le mainteneur de ddrescue.