ed
C’est le premier éditeur de ligne de texte.
Il ne possède qu’un mode commande 😂,
ce qui peut faire sourire au temps de vscode.
Pourtant, cette antiquité procure encore aujourd’hui des avantages à celui qui la maitrise.
Une commande ed est une ligne de la forme :
[étendue] commande [arguments...]
1. Principales commandes
-
ajouter des lignes :
a(passage en mode append, pour ajouter des lignes après la ligne courante) oui(passage en mode insert pour ajouter des lignes avant la ligne courante), on sort de ce mode par un. -
afficher :
p(print, affiche la ligne courante),n(affiche la ligne courante avec son n°) et=(affiche le n° de la ligne courante) -
modifier :
c(change) ets(substitute) -
effacer :
d(delete)
auxquelles s’ajoutent d’autres opérations indispensables :
-
sauvegarder :
w(write) ouw fichier -
lire un fichier et l’insérer :
r fichier(read) -
quitter :
q
2. Déplacement de la ligne courante
-
n : la ligne n° n devient la ligne courante
-
-1 : la ligne précédente devient la ligne courante
-
+1 : la ligne suivante devient la ligne courante
-
P : mode prompt on/off (bascule)
Exemple :
$ ed /etc/services p # affiche la ligne courante .= # affiche le n° de la ligne courante s/tcp/****/ # substitue la première occurence de 'tcp' en '****' sur la ligne courante p # affiche la ligne courante a # entrée dans le mode append un deux trois . # sortie du mode append w /tmp/services # sauvegarde (write) q # quitte
3. L’étendue
La commande peut être précédée d’une étendue, qui précise sur quelles lignes on applique la commande qui suit (par défaut, elle est appliquée sur la ligne courante seulement) :
n # la ligne n . # ligne courante +n # n lignes après la courante -n # n lignes avant la courante $ # la dernière ligne n,m # les lignes de n à m -n,+m 1,$ # toutes les lignes .,+3 # 3 lignes à partir de la courante /regex/ # première ligne s'identifiant à la regex (à partir de la courante vers la fin) ?regex? # première ligne s'identifiant à la regex (à partir de la courante vers le début) /regex1/,/regex2/ # de la ligne s'identifiant à regex1 à la ligne s'identifiant à regex2 g/regex/ # groupe les lignes s'identifiant à la regex
Exemple :
$ ed /etc/services i # entrée en mode insert Première ligne Deuxième ligne . # fin du mode insert 1,.p # les premières lignes jusqu'à la courante w /tmp/simple.txt # sauvegarde 20,30w /tmp/extrait.txt # sauvegarde partielle 1a # append Après la première . # fin append 1,10p 1i Encore avant la première . 1,10p w $= # n° de la dernière ligne 10r /etc/passwd # lecture du fichier /etc/passwd et ajout à la ligne 10 $= # adresse de la dernière ligne 1,20p 11,15d # suppression des lignes 11 à 15 $= # adresse de la dernière ligne 15,$d # suppression des lignes de la 15ème à la fin $= # adresse de la dernière ligne 1s/e/E/p # ligne 1, remplace le premier 'e' par 'E', et écrit le résultat u # annule (undo) 1s/e/E/gp # ligne 1, remplace tous les 'e' par 'E' (g: global) 1,$s/ /+/ # remplace le premier espace par un + sur chaque ligne 1,$p
4. Presse-papier
-
y : copie des lignes dans le presse-papier de
ed -
d : coupe des lignes et la met dans le presse-papier de
ed -
x : colle le presse-papier de
ed
5. Focus sur la commande substitute
C’est la commande la plus intéressante,
qui justifie qu’on peut encore avec besoin de ed aujourd’hui.
s/avant/après/ # 1ère occurrence sur la ligne courante 1,$s/avant/après/ # 1ère occurrence sur toutes les lignes s/avant/après/g # toutes les occurrences sur la ligne courante 1,$s/avant/après/g # toutes les occurrences sur toutes les lignes