Éditeur de Texte Sed: Principes et Applications

Introduction

L'éditeur sed traite les fichiers (ou entrées) ligne par ligne et envoie les résultats vers l'écran. Le processus fonctionne comme suit : sed stocke la ligne actuellement traitée dans une zone tampon temporaire (également appelée espace de motif), traite cette ligne dans la zone tampon, puis envoie le résultat vers l'écran. Après avoir traité chaque ligne, sed la supprime de la zone tampon, lit la ligne suivante, la traite et l'affiche. Une fois la dernière ligne du fichier d'entrée traitée, sed termine son exécution. Comme sed travaille sur une copie de chaque ligne dans la zone tampon, il ne modifie pas le fichier original.

Flux d'Exécution de Sed

L'exécution des scripts sed suit un ordre simple et mémorable : Lire, Exécuter, Imprimer, Répéter (LEIR), abrégé en REPR.

Analysons l'ordre d'exécution du script :

Lire une ligne dans l'espace de motif (une zone tampon temporaire interne à sed pour stocker le contenu lu)
Exécuter les commandes dans l'espace de motif. Si plusieurs commandes sont spécifiées avec { } ou -e, sed les exécute séquentiellement
Imprimer le contenu de l'espace de motif, puis le vider
Répéter le processus jusqu'à la fin du fichier

Comme illustré :

L'éditor sed traite les fichiers (ou entrées) ligne par ligne et envoie les résultats vers l'écran. Le processus fonctionne comme suit : tout d'abord, sed stocke la ligne actuellement traitée dans une zone tampon temporaire (également appelée espace de motif), puis traite cette ligne dans la zone tampon, et enfin envoie le résultat vers l'écran. Après avoir traité chaque ligne, sed la supprime de la zone tampon, lit la ligne suivante, la traite et l'affiche. Une fois la dernière ligne du fichier d'entrée traitée, sed termine son exécution.

Comme mentionné précédemment, sed ne modifie pas les fichiers car il travaille sur une copie de chaque ligne dans la zone tampon, effectuant ainsi l'édition sur cette copie plutôt que sur le fichier original.

Présentation des Méthodes d'Utilisation de Sed

Sed présente deux formats de syntaxe courants : le format en ligne de commande et le format de script.

Format de commande sed : sed [option] 'commande sed' nom_fichier

Format de script sed : sed [option] -f 'script sed' nom_fichier<br></br><br></br>

  1. Format en Ligne de Commande

Syntaxe

sed [options] 'action de traitement' nom_fichier

sed [option] 'commande sed|localisation d'adresse' nom_fichier

Remarque : l'action de traitement correspond à la commande sed

Explication : pour引用 des variables de script shell, il faut utiliser des guillemets doubles, plutôt que les guillemets simples habituellement utilisés

Options de Commande Sed

<br></br>-e 	Effectue directement l'édition par action sed en ligne de commande, option par défaut<br></br>-f 	Écrit les actions sed dans un fichier, exécute les actions du fichier avec –f nom_fichier<br></br>-i 	Modifie directement le contenu du fichier<br></br>-n 	N'imprime que les lignes correspondant au motif ; annule la sortie par défaut<br></br>-r 	Prend en charge les expressions régulières étendues<br></br>-h --help 	Affiche l'aide<br></br>-v --version 	Affiche les informations de version<br></br><br></br>

Commandes Courantes Sed (sed command) ou Actions de Traitement

Remarque : toutes les actions suivantes doivent être entre guillemets simples

<br></br><br></br>a\			Ajoute une ou plusieurs lignes après la ligne actuelle. Pour plusieurs lignes, sauf la dernière, chaque ligne doit se terminer par \ pour être poursuivie<br></br>c\			Remplace le texte de la ligne actuelle par le nouveau texte qui suit ce symbole. Pour plusieurs lignes, sauf la dernière, chaque ligne doit se terminer par \" pour être poursuivie<br></br>i\			Insère du texte avant la ligne actuelle. Pour plusieurs lignes, sauf la dernière, chaque ligne doit se terminer par \" pour être poursuivie<br></br>d			Supprime la ligne ; supprime les lignes sélectionnées<br></br>D              Supprime la première ligne du bloc de motif<br></br>s			Remplace une chaîne de caractères par une autre<br></br><br></br>h			Copie le contenu de l'espace de motif vers la zone tampon temporaire ; copie le contenu du bloc de motif vers la zone tampon mémoire<br></br>H			Ajoute le contenu de l'espace de motif vers la zone tampon temporaire ; ajoute le contenu du bloc de motif vers la zone tampon mémoire<br></br>g			Copie le contenu de la zone tampon vers l'espace de motif, écrasant le contenu existant ; récupère le contenu de la zone tampon mémoire et remplace le texte du bloc de motif actuel<br></br>G			Ajoute le contenu de la zone tampon à l'espace de motif, après le contenu existant ; récupère le contenu de la zone tampon mémoire et l'ajoute après le texte du bloc de motif actuel<br></br><br></br><br></br>l			Liste les caractères non imprimables ; affiche la liste des caractères qui ne peuvent pas être imprimés<br></br>p			Imprime la ligne ; imprime les lignes du bloc de motif<br></br>P              Imprime la première ligne du bloc de motif<br></br>n			Lit la ligne d'entrée suivante et commence son traitement avec la commande suivante plutôt qu'avec la première commande ; lit la ligne d'entrée suivante et la traite avec la commande suivante plutôt qu'avec la première<br></br>N              Ajoute la ligne d'entrée suivante au bloc de motif et insère un saut de ligne entre les deux, change le numéro de ligne actuel<br></br>q			Terminer ou quitter sed<br></br><br></br>r fichier			Lit les lignes d'entrée du fichier ; lit les lignes du fichier<br></br>w fichier		     Écrit les lignes sélectionnées dans un fichier ; écrit et ajoute la première ligne du bloc de motif à la fin du fichier<br></br>=              Imprime le numéro de ligne actuel<br></br>#              Étend le commentaire jusqu'au prochain saut de ligne<br></br>!			Applique la commande à toutes les lignes non sélectionnées ; indique que la commande suivante s'applique à toutes les lignes non sélectionnées<br></br><br></br>étiquette            Branche vers l'endroit marqué dans le script, si la branche n'existe pas, elle branche à la fin du script<br></br>t              étiquette si branche, à partir de la dernière ligne, dès que la condition est remplie ou par les commandes T, t, cela provoquera un branchement vers la commande étiquetée ou à la fin du script<br></br>T              étiquette branche d'erreur, à partir de la dernière ligne, dès qu'une erreur se produit ou par les commandes T, t, cela provoquera un branchement vers la commande étiquetée ou à la fin du script

Marqueurs de Substitution Sed

g     Substitution globale dans la ligne
p     Imprime la ligne
w     Écrit la ligne dans un fichier
x     Échange le texte du bloc de motif et le texte de la zone tampon ; échange le contenu de la zone tampon temporaire et de l'espace de motif
y     Remplace un caractère par un autre (ne peut pas être utilisé avec les expressions régulières)
\1     Marqueur de sous-chaîne correspondante
&     Marqueur de chaîne correspondante ; sauvegarde la chaîne de recherche pour référence dans la chaîne de remplacement

Ensemble de Métacaractères Sed

Comme grep, sed prend également en charge les métacaractères spéciaux pour effectuer des recherches et des substitutions de motifs. La différence est que les expresisons régulières utilisées par sed sont des motifs entourés de barres obliques "/" .

Si vous souhaitez modifier le séparateur d'expression régulière "/" par un autre caractère, par exemple "o", il suffit d'ajouter une barre oblique inverse avant ce caractère, puis l'expression régulière, puis ce caractère. Par exemple :

sed -n '\o^Monop' fichier_données

Plus précisément :

 

^                Ancre le contenu correspondant au début de la ligne, format d'utilisation "^motif" ; par exemple /^mon/ correspond à toutes les lignes commençant par mon
$                Ancre le contenu correspondant à la fin de la ligne, format d'utilisation "motif$" ; par exemple : /mon$/ correspond à toutes les lignes se terminant par mon
^$               Ligne vide
.                Correspond à n'importe quel caractère sauf le saut de ligne ; /m..y/ correspond aux lignes contenant la lettre m, suivie de deux caractères quelconques, puis la lettre y*                Correspond à zéro, une ou plusieurs occurrences du caractère précédent ; par exemple /mon*/ correspond aux lignes contenant la lettre m, suivie de zéro ou plusieurs lettres y
.*               Correspond à n'importe quelle longueur de caractères quelconques
\?              Correspond à zéro ou une occurrence du caractère précédent
x\{m,n\} 	 Répète le caractère x, au moins m fois, pas plus de n fois 	/0\{5,10\}/ correspond aux lignes avec 5~10 zéros
x\{m,\} 	 Répète le caractère x, au moins m fois 	/0\{5,\}/ correspond aux lignes avec au moins 5 zéros
x\{m\}     Répète le caractère x, m fois  /0\{5\}/ correspond aux lignes contenant exactement 5 zéros
/<         \<mon/ correspond aux lignes contenant des mots commençant par mon\> 	      Ancre de fin de mot 	/mon\>/ correspond aux lignes contenant des mots se terminant par mon
\<motif\>        Ancre de mot

[]                Correspond à n'importe quel caractère unique de la plage spécifiée ; /[Mm]on/ correspond aux lignes contenant Mon ou mon
[^]                Correspond à n'importe quel caractère unique en dehors de la plage spécifiée ; par exemple /[^A-RT-Z]ed/ correspond aux lignes commençant par autre chose que A-R et T-Z, suivies de ed
\(..\)            Sauvegarde les caractères correspondants ; ```
s/J\(aime\)\(toi\)/\2\1moi J'aime toi -> toi aime moi
```&          Sauvegarde la chaîne de recherche pour référence dans la chaîne de remplacement ; ```
s/aime/**&**/, aime -> **aime**

[:digit:] Tous les chiffres, équivalent de 0-9, [0-9]---> [[:digit:]] [:lower:] Toutes les lettres minuscules [:upper:] Toutes les lettres majuscules [:alpha:] Toutes les lettres [:alnum:] Équivalent de 0-9a-zA-Z [:space:] Caractères d'espacement [:punct:] Tous les signes de ponctuation


</div>Exemple :

<div>```
    #######sed prend en charge les expressions régulières pour la correspondance de motifs#####################  
    sed'5 q'/etc/passwd#affiche les 5 premières lignes  
    sed-n '/r*t/p'/etc/passwd#affiche les lignes correspondant à r avec 0 ou plusieurs occurrences, suivies d'un caractère t  
    sed-n '/.r.*/p'/etc/passwd#affiche les lignes contenant r et suivie de n'importe quel caractère  
    sed-n '/o*/p'/etc/passwd#affiche les lignes avec le caractère o répété un nombre quelconque de fois  
    sed-n '/o\{1,\}/p'/etc/passwd#affiche les lignes avec le caractère o apparaissant au moins une fois  
    sed-n '/o\{1,3\}/p'/etc/passwd#affiche les lignes avec le caractère o apparaissant de 1 à 3 fois

Adressage Sed

L'adressage détermine quelles lignes traiter. L'adresse peut être un numéro, une expression régulière, ou une combinaison des deux. Si aucune adresse n'est spécifiée, sed traitera toutes les lignes du fichier d'entrée.

Si l'adresse est un numéro, elle représente un numéro de ligne ; le symbole "$" représente la dernière ligne.

Si l'adresse est séparée par une virgule, elle représente une plage entre deux lignes (incluant ces deux lignes).

premier~pas    premier indique la ligne de départ correspondance, pas indique l'incrément, par exemple : sed -n 2~5p signifie : correspond à partir de la ligne 2, toutes les 5 lignes, c'est-à-dire 2,7,12…
$         $ signifie correspondre à la dernière ligne
/REGEXP/    signifie correspondre à la ligne avec l'expression régulière, correspond via l'expression régulière entre //
\cREGEXPc    cela signifie correspondre à la ligne avec l'expression régulière, via l'expression régulière entre \c et c, c peut être n'importe quel caractère
addr1, add2    L'adressage addr1, add2 détermine quelles lignes éditer. Les adresses peuvent être des numéros, des expressions régulières ou une combinaison des deux.<br></br>          Si aucune adresse n'est spécifiée, sed traitera toutes les lignes du fichier d'entrée. Si l'adressage est un numéro, ce numéro représente le numéro de ligne, si c'est deux numéros séparés par une virgule,<br></br>          alors l'adressage à traiter est la plage entre les deux lignes (incluant ces deux lignes). La plage peut être numérique, régulière ou une combinaison.
addr1, +N    De la ligne addr1 jusqu'à N lignes plus bas, correspondant à un total de N+1 lignes
addr1, ~N    Correspondra à addr1 et aux lignes suivantes jusqu'à la ligne dont le numéro est un multiple de N suivant<br></br><br></br><br></br>x                     x est un numéro de ligne spécifique
x,y            Indique les lignes de x à y
/motif            Recherche les lignes contenant le motif
/motif /motif    Recherche les lignes contenant deux motifs
motif,x            Recherche les lignes contenant le motif jusqu'à la ligne x
x,/motif/            Recherche les lignes correspondantes par numéro de ligne et motif
x,y!                Recherche les lignes ne contenant pas les numéros de ligne x et y

Figure 1:

Figure 2:

Figure 3:

Exemples Illustratifs

Préparation du fichier

# vim donnees.txt 
administrateur:x:0:0:administrateur:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
298374837483
172.16.0.254
10.1.1.1

1. Opérations d'ajout, suppression, modification et recherche sur le fichier

Syntaxe : sed options 'localisation+commande' fichier à traiter

1.Afficher le contenu du fichier

[serveur~]# sed ''  donnees.txt                        Ne fait rien sur le fichier
[serveur~]# sed -n 'p'  donnees.txt                    Affiche chaque ligne, annule la sortie par défaut
[serveur~]# sed -n '1p'  donnees.txt                    Affiche la ligne 1
[serveur~]# sed -n '2p'  donnees.txt                    Affiche la ligne 2
[serveur~]# sed -n '1,5p'  donnees.txt                Affiche les lignes 1 à 5
[serveur~]# sed -n '$p' donnees.txt                     Affiche la dernière ligne

2.Ajout de contenu au fichier

i Insertion au-dessus de l'adresse localisée

Insère du texte avant la ligne actuelle. Pour plusieurs lignes, sauf la dernière, chaque ligne doit se terminer par "\" pour être poursuivie vim→O

a Insertion en dessous

Ajoute une ou plusieurs lignes après la ligne actuelle. Pour plusieurs lignes, sauf la dernière, chaque ligne doit se terminer par "\" pour être poursuivie vim→o

[serveur~]# sed '$a99999' donnees.txt                 Ajoute du contenu sous la dernière ligne du fichier
[serveur~]# sed 'a99999' donnees.txt                 Ajoute du contenu sous chaque ligne du fichier
[serveur~]# sed '5a99999' donnees.txt                 Ajoute du contenu sous la ligne 5 du fichier
[serveur~]# sed '$i99999' donnees.txt                 Ajoute du contenu au-dessus de la dernière ligne du fichier
[serveur~]# sed 'i99999' donnees.txt                 Ajoute du contenu au-dessus de chaque ligne du fichier
[serveur~]# sed '6i99999' donnees.txt                 Ajoute du contenu au-dessus de la ligne 6 du fichier
[serveur~]# sed '/^uucp/ihello'                Insère du contenu au-dessus des lignes commençant par uucp

3.Modification du contenu du fichier

c Remplacement du contenu de la ligne spécifiée

Remplace le texte de la ligne actuelle par le nouveau texte qui suit ce symbole. Pour plusieurs lignes, sauf la dernière, chaque ligne doit se terminer par "\" pour être poursuivie Remplacement de toute la ligne

[serveur~]# sed '5chello world' donnees.txt         Remplace le contenu de la ligne 5
[serveur~]# sed 'chello world' donnees.txt         Remplace tout le contenu du fichier
[serveur~]# sed '1,5chello world' donnees.txt     Remplace le contenu des lignes 1 à 5 par hello world
[serveur~]# sed '/^utilisateur01/c888888' donnees.txt    Remplace les lignes commençant par utilisateur01

4.Suppression du contenu du fichier

[serveur~]# sed '1d' donnees.txt                         Supprime la ligne 1 du fichier
[serveur~]# sed '1,5d' donnees.txt                     Supprime les lignes 1 à 5 du fichier
[serveur~]# sed '$d' donnees.txt                        Supprime la dernière ligne du fichier

2. Opérations de recherche et substitution sur le fichier

Syntaxe : sed options 's/recherche/substitution/action' fichier à traiter

s signifie search (recherche) ; les barres obliques / sont des séparateurs qui peuvent être personnalisés ; l'action est généralement l'impression p et le remplacement global g

[serveur~]# sed -n 's/administrateur/ADMINISTRATEUR/p' 1.txt 
[serveur~]# sed -n 's/administrateur/ADMINISTRATEUR/gp' 1.txt 
[serveur~]# sed -n 's/^#//gp' 1.txt 
[serveur~]# sed -n 's@/sbin/nologin@formation@gp' donnees.txt
[serveur~]# sed -n 's/\/sbin\/nologin/formation/gp' donnees.txt
[serveur~]# sed -n '10s#/sbin/nologin#formation#p' donnees.txt 
uucp:x:10:14:uucp:/var/spool/uucp:formation
[serveur~]# sed -n 's@/sbin/nologin@formationentreprise@p' 2.txt 
Remarque : les séparateurs de recherche et substitution peuvent être personnalisés

[serveur~]# sed -n '1,5s/^/#/p' donnees.txt         Commente les lignes 1-5 du fichier
#administrateur:x:0:0:administrateur:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

Point important : la commande sed permet de remplacer le contenu des fichiers (l'opération de remplacement est la plus utilisée dans les scripts d'automatisation shell)****

#================ Contenu du fichier source ===============================

[serveur~]# cat test  
anonymous_enable=OUI  
write_enable=OUI  
local_umask=022  
xferlog_enable=OUI  
connect_from_port_20=OUI  
administrateur:x:0:0:administrateur:/root:/bin/bash  
bin:x:1:1:bin:/bin:/sbin/nologin  
daemon:x:2:2:daemon:/sbin:/sbin/nologin  
adm:x:3:4:adm:/var/adm:/sbin/nologin  
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin  
DISPOSITIF="eth0"  
PROTOCOLE="statique"  
ADRESSE_MAC="00:0C:29:90:79:78"  
DEMARRAGE="oui"  
IPADDR=172.16.22.1  
MASQUE=255.255.0.0  

#===================== Commandes sed exécutées ================================

[serveur~]# sed -i '/DISPOSITIF/c\Reseau' test   
        #Correspond à la ligne avec DISPOSITIF, remplace par Reseau  
[serveur~]# sed -i 's/statique/dhcp/' test       
        #Remplace statique par dhcp(/,@,# sont les délimiteurs d'adresse mentionnés précédemment)  
[serveur~]# sed -i '/IPADDR/s@22\.1@10.12@' test  
        #Correspond à la ligne avec IPADDR, remplace 22.1 par 10.12, le . doit être échappé car il a une signification spéciale  
[serveur~]# sed -i '/connect/s#OUI#NON#' test   
        #Correspond à la ligne avec connect, remplace OUI par NON  
[serveur~]# sed -i 's/bin/tom/2g' test         
        #Dans toutes les lignes correspondant à bin, remplace bin par tom à partir de la deuxième occurrence et suivantes  
[serveur~]# sed -i 's/daemon/jerry/2p' test    
        #Dans toutes les lignes correspondant à daemon, remplace la deuxième occurrence de daemon par jerry, et produit une ligne identique  
[serveur~]# sed -i 's/adm/chef/2' test         
        #Dans toutes les lignes correspondant à adm, remplace uniquement la deuxième occurrence de adm par chef  
[serveur~]# sed -i '/administrateur/{s/bash/nologin/;s/0/1/g}' test  
        #Correspond aux lignes avec administrateur, remplace bash par nologin, et remplace 0 par 1  
[serveur~]# sed -i 's/administrateur/(&)/g' test                   
        #Met administrateur entre parenthèses, & représente le caractère correspondant précédent  
[serveur~]# sed -i 's/PROTOCOLE/#PROTOCOLE/' test        
        #Correspond à PROTOCOLE, remplace par #PROTOCOLE, généralement utilisé pour commenter une ligne dans les fichiers de configuration  
[serveur~]# sed -i 's/DEMARRAGE/#&/' test                   
        #Correspond à la ligne avec DEMARRAGE, ajoute # devant, généralement utilisé pour commenter une ligne dans les fichiers de configuration  
[serveur~]# sed -i '/DEMARRAGE/s/#//' test                  
        #Correspond à la ligne avec DEMARRAGE, remplace # par vide, c'est-à-dire supprime #, généralement utilisé pour décommenter une ligne

#================ Contenu du fichier après exécution des commandes sed ====================

[serveur~]# cat test  
anonymous_enable=OUI  
write_enable=OUI  
local_umask=022  
xferlog_enable=OUI  
connect_from_port_20=NON  
(administrateur):x:1:1:(administrateur):/(administrateur):/bin/nologin  
bin:x:1:1:tom:/tom:/stom/nologin  
daemon:x:2:2:jerry:/sbin:/stom/nologin  
daemon:x:2:2:jerry:/sbin:/stom/nologin  
adm:x:3:4:chef:/var/adm:/sbin/nologin  
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin  
Reseau  
#PROTOCOLE="dhcp"  
ADRESSE_MAC="00:0C:29:90:79:78"  
DEMARRAGE="oui"  
IPADDR=172.16.10.12  
MASQUE=255.255.0.0  

3.Autres commandes

Commande    Explication    Remarque
r    Lit le contenu d'un autre fichier     
w    Enregistre le contenu dans un autre fichier     
&    Sauvegarde la chaîne de recherche pour référence dans la chaîne de remplacement    Identique à \(\)
=    Affiche le numéro de ligne     
!    Applique la commande à toutes les lignes sauf celles sélectionnées, placé après le numéro de ligne    '1,5!'
q    Quitter     

Exemples :

r    Lit le contenu d'un autre fichier
w    Enregistre les lignes sélectionnées dans un fichier
[serveur~]# sed '3r /etc/hosts' 2.txt 
[serveur~]# sed '$r /etc/hosts' 2.txt
[serveur~]# sed '/administrateur/w donnees.txt' 2.txt 
[serveur~]# sed '/[0-9]{4}/w donnees.txt' 2.txt
[serveur~]# sed  -r '/([0-9]{1,3}\.){3}[0-9]{1,3}/w b.txt' 2.txt

!    Applique la commande à toutes les lignes sauf celles sélectionnées, placé après le numéro de ligne
[serveur~]# sed -n '1!p' 1.txt 
[serveur~]# sed -n '4p' 1.txt 
[serveur~]# sed -n '4!p' 1.txt 
[serveur~]# cat -n 1.txt 
[serveur~]# sed -n '1,17p' 1.txt 
[serveur~]# sed -n '1,17!p' 1.txt 

&   Sauvegarde la chaîne de recherche pour référence dans la chaîne de remplacement   \(\)

[serveur~]# sed -n '/administrateur/p' donnees.txt 
administrateur:x:0:0:administrateur:/root:/bin/bash
[serveur~]# sed -n 's/administrateur/#&/p' donnees.txt 
#administrateur:x:0:0:administrateur:/root:/bin/bash

# sed -n 's/^administrateur/#&/p' passwd   Commente les lignes commençant par administrateur
# sed -n -r 's/^administrateur|^eleve/#&/p' /etc/passwd    Commente les lignes commençant par administrateur ou par eleve
# sed -n '1,5s/^[a-z].*/#&/p' passwd  Commente les lignes 1~5 commençant par n'importe quelle lettre minuscule
# sed -n '1,5s/^/#/p' /etc/passwd  Commente les lignes 1~5
Ou
sed -n '1,5s/^/#/p' passwd Ajoute # devant les lignes commençant par un espace
sed -n '1,5s/^#//p' passwd Remplace # par vide au début des lignes

[serveur~]# sed -n '/^administrateur/p' 1.txt 
[serveur~]# sed -n 's/^administrateur/#&/p' 1.txt 
[serveur~]# sed -n 's/\(^administrateur\)/#\1/p' 1.txt 
[serveur~]# sed -nr '/^administrateur|^eleve/p' 1.txt 
[serveur~]# sed -nr 's/^administrateur|^eleve/#&/p' 1.txt 


=     Affiche le numéro de ligne
# sed -n '/bash$/=' passwd    Affiche le numéro de ligne se terminant par bash
# sed -ne '/administrateur/=' -ne '/administrateur/p' passwd 
# sed -n '/nologin$/=;/nologin$/p' 1.txt
# sed -ne '/nologin$/=' -ne '/nologin$/p' 1.txt

q    Quitter
# sed '5q' 1.txt
# sed '/mail/q' 1.txt
# sed -r '/^admin|^mail/q' 1.txt
[serveur~]# sed -n '/bash$/p;10q' 1.txt
ADMINISTRATEUR:x:0:0:administrateur:/root:/bin/bash


Utilisation combinée :
[serveur~]# sed -n '1,5s/^/#&/p' 1.txt 
#administrateur:x:0:0:administrateur:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[serveur~]# sed -n '1,5s/\(^\)/#\1/p' 1.txt 
#administrateur:x:0:0:administrateur:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

4.Autres options

-e Édition multiple
-r    Expressions régulières étendues
-i Modification du fichier original

[serveur~]# sed -ne '/administrateur/p' 1.txt -ne '/administrateur/='
administrateur:x:0:0:administrateur:/root:/bin/bash
1
[serveur~]# sed -ne '/administrateur/=' -ne '/administrateur/p' 1.txt 
1
administrateur:x:0:0:administrateur:/root:/bin/bash

Insère "hello world" avant la ligne 5 dans le fichier 1.txt ; insère "hahaha" sous la ligne 8 dans le fichier 1.txt

[serveur~]# sed -e '5ihello world' -e '8ahahaha' 1.txt  -e '5=;8='

sed -n '1,5p' 1.txt
sed -ne '1p' -ne '5p' 1.txt
sed -ne '1p;5p' 1.txt

Filtrage des lignes commençant par # et les lignes vides dans vsftpd.conf :
[serveur~]# grep -Ev '^#|^$' /etc/vsftpd/vsftpd.conf
[serveur~]# sed -e '/^#/d' -e '/^$/d' /etc/vsftpd/vsftpd.conf
[serveur~]# sed '/^#/d;/^$/d' /etc/vsftpd/vsftpd.conf
[serveur~]# sed -r '/^#|^$/d' /etc/vsftpd/vsftpd.conf

Filtrage des lignes actives dans smb.conf :
# sed -e '/^#/d' -e '/^;/d' -e '/^$/d' -e '/^\t$/d' -e '/^\t#/' smb.conf
# sed -r '/^(#|$|;|\t#|\t$)/d' smb.conf 

# sed -e '/^#/d' -e '/^;/d' -e '/^$/d' -e '/^\t$/d' -e '/^\t#/' smb.conf


[serveur~]# grep '^[^a-z]' 1.txt

[serveur~]# sed -n '/^[^a-z]/p' 1.txt

Extraction des adresses IP du fichier :
[serveur~]# grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}' 1.txt 
192.168.0.254
[serveur~]# sed -nr '/([0-9]{1,3}\.){3}[0-9]{1,3}/p' 1.txt 
192.168.0.254

[serveur~]# grep -o -E '([0-9]{1,3}\.){3}[0-9]{1,3}' 2.txt 
10.1.1.1
10.1.1.255
255.255.255.0

[serveur~]# sed -nr '/([0-9]{1,3}\.){3}[0-9]{1,3}/p' 2.txt
10.1.1.1
10.1.1.255
255.255.255.0
Extraction de l'IP, masque de sous-réseau et adresse de diffusion du fichier ifcfg-eth0
[serveur shell06]# grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' ifcfg-eth0 
10.1.1.1
255.255.255.0
10.1.1.254
[serveur shell06]# sed -nr '/([0-9]{1,3}\.){3}[0-9]{1,3}/p' ifcfg-eth0|cut -d'=' -f2
10.1.1.1
255.255.255.0
10.1.1.254
[serveur shell06]# sed -nr '/([0-9]{1,3}\.){3}[0-9]{1,3}/p' ifcfg-eth0|sed -n 's/[A-Z=]//gp'
10.1.1.1
255.255.255.0
10.1.1.254

[serveur shell06]# ifconfig eth0|sed -n '2p'|sed -n 's/[:a-Z]//gp'|sed -n 's/ /\n/gp'|sed '/^$/d'
10.1.1.1
10.1.1.255
255.255.255.0
[serveur shell06]# ifconfig | sed -nr '/([0-9]{1,3}\.)[0-9]{1,3}/p' | head -1|sed -r 's/([a-z:]|[A-Z/t])//g'|sed 's/ /\n/g'|sed  '/^$/d'

[serveur shell06]# ifconfig eth0|sed -n '2p'|sed -n 's/.*addr:\(.*\) Bcast:\(.*\) Mask:\(.*\)/\1\n\2\n\3/p'
10.1.1.1 
10.1.1.255 
255.255.255.0

-i option  Modification directe du fichier original
# sed -i 's/administrateur/ADMINISTRATEUR/;s/eleve/ELEVE/' 11.txt
# sed -i '17{s/ADMIN/administrateur/;s#/bin/bash#/sbin/nologin#}' 1.txt
# sed -i '1,5s/^/#&/' donnees.txt
Remarque :
-ni  Ne les utilisez pas ensemble
p command  Ne l'utilisez pas avec -i

5.Sed avec expressions régulières

sed options 'commande sed ou expression régulière ou localisation d'adresse=='== nom_fichier

1.L'adressage détermine quelles lignes éditer. L'adresse peut être un numéro, une expression régulière, ou une combinaison des deux.

2.Si aucune adresse n'est spécifiée, sed traitera toutes les lignes du fichier d'entrée.

x                   Spécifie le numéro de ligne x                         sed -n '5p' 1.txt
x,y                 Spécifie les lignes de x à y                     sed -n '1,5p' 1.txt
/motif             Recherche les lignes contenant le mot clé        sed -n '/administrateur/p' 1.txt
/motif1/,/motif2/    Correspond aux lignes entre deux mots clés    sed -n '/^adm/,/^mysql/p' 1.txt
/motif/,x          De la ligne correspondant au mot clé jusqu'à la ligne x (incluant la ligne du mot clé) sed -n '/^lp/,7p' 
x,/motif/          De la ligne x jusqu'à la ligne correspondant au mot clé
x,y!                 Exclut les lignes de x à y

Par exemple :

[serveur~]# sed -n '/bash$/!p' 1.txt

Remarque : les expressions régulières utilisées par sed sont des motifs entourés de barres obliques "/" .

//La commande suivante trouve les lignes commençant par lp ou par mail

Autres commandes

y commande
Cette commande est similaire à la commande tr d'UNIX/Linux, les caractères sont convertis un-à-un de gauche à droite.
Les métacaractères d'expression régulière n'ont aucun effet sur la commande y. Comme le séparateur de commande s, la barre oblique peut être remplacée par d'autres caractères.
s/xxx/xxx/
y/xxx/xxx/
# sed '39,41y/eleve/ELEVE/' /etc/passwd
# sed '39,41y/eleve:x/ELEVE@%/' /etc/passwd

q    Quitter
# sed '5q' 1.txt
# sed '/mail/q' 1.txt
# sed -r '/^admin|^mail/q' 1.txt
[serveur~]# sed -n '/bash$/p;10q' 1.txt
ADMINISTRATEUR:x:0:0:administrateur:/root:/bin/bash

  1. Format de Script

1.Utilisation

# sed -f scripts.sh  fichier        //Utilise un script pour traiter le fichier
Recommandé d'utiliser   ./sed.sh   fichier

La première ligne du script doit contenir
#!/bin/sed -f
1,5d
s/administrateur/bonjour/g
3i777
5i888
a999
p

2.Remarques

1) Le fichier de script est une liste de commandes sed. 'commandes'
2) À la fin de chaque ligne, il ne doit y avoir aucun espace, tabulation (tab) ou autre texte.
3) S'il y a plusieurs commandes dans une ligne, elles doivent être séparées par des points-virgules.
4) Les guillemets ne sont pas nécessaires et ne peuvent pas être utilisés pour protéger les commandes
5)  Les lignes commençant par # sont des commentaires

3.Exemples

# cat passwd
eleve3:x:509:512::/home/user3:/bin/bash
eleve4:x:510:513::/home/user4:/bin/bash
eleve5:x:511:514::/home/user5:/bin/bash

# cat sed.sh 
#!/bin/sed -f
2a\
******************
2,$s/eleve/utilisateur/
$a\
nous insérons une nouvelle ligne
s/^[a-z].*/#&/

[serveur~]# cat 1.sed 
#!/bin/sed -f
3a**********************
$cbonjour le monde
1,3s/^/#&/

[serveur~]# sed -f 1.sed -i 11.txt 
[serveur~]# cat 11.txt 
#administrateur:x:0:0:administrateur:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
**********************
adm:x:3:4:adm:/var/adm:/sbin/nologin
bonjour le monde

  1. Résumé et Extensions

1、Les expressions régulières doivent être entourées de "/" avant et après
Par exemple : sed '/administrateur/d' fichier
Par exemple : sed '/^administrateur/d' fichier

2、Si la correspondance utilise des expressions régulières étendues, l'option -r doit être utilisée pour étendre sed
grep -E
sed -r
+ ? () {n,m} | \d

Remarque :         
Dans les expressions régulières, si des caractères spéciaux apparaissent (^$.*/[]), ils doivent être échappés avec "\" précédent
eg:sed '/\$foo/p' fichier

3、Séparateur par virgule
Par exemple : sed '5,7d' fichier                  Supprime les lignes 5 à 7
Par exemple : sed '/administrateur/,/ftp/d' fichier    
Supprime toutes les lignes de la première correspondance "administrateur" à la première correspondance "ftp", cette ligne non recherchée, exécution en boucle
       
4、Combinaison
Par exemple : sed '1,/foo/d' fichier            Supprime du début jusqu'à la première correspondance "foo"
Par exemple : sed '/foo/,+4d' fichier            Supprime de la correspondance "foo" jusqu'à 4 lignes après
Par exemple : sed '/foo/,~3d' fichier            Supprime de la correspondance "foo" jusqu'à la ligne multiple de 3 (dans le fichier)
Par exemple : sed '1~5d' fichier                À partir de la ligne 1, supprime une ligne toutes les 5 lignes
Par exemple : sed -nr '/foo|bar/p' fichier    Affiche les lignes avec la configuration "foo" ou "bar"
Par exemple : sed -n '/foo/,/bar/p' fichier    Affiche les lignes correspondant de foo à bar
Par exemple : sed '1~2d'  fichier                Supprime les lignes impaires
Par exemple : sed '0-2d'   fichier                Supprime les lignes paires sed '1~2!d'  fichier

5、Cas particuliers
Par exemple : sed '$d' fichier                    Supprime la dernière ligne
Par exemple : sed '1d' fichier                    Supprime la première ligne
    
6、Autres :
sed 's/.//' donnees.txt                        Supprime le premier caractère de chaque ligne
sed 's/.//2' donnees.txt                    Supprime le deuxième caractère de chaque ligne
sed 's/.//N' donnees.txt                    À partir de la ligne N du fichier, supprime le Nième caractère de chaque ligne (N>2)
sed 's/.$//' donnees.txt                    Supprime le dernier caractère de chaque ligne


[serveur~]# cat 2.txt 
1 a
2 b
3 c
4 d
5 e
6 f
7 u
8 k
9 o
[serveur~]# sed '/c/,~2d' 2.txt 
1 a
2 b
5 e
6 f
7 u
8 k
9 o

  1. Exercices

Exercice 1 :

    Remplacer n'importe quel chiffre par un espace ou une tabulation
    Supprimer les chiffres, deux-points et barres obliques des lignes 1-5 d'un fichier
    Rechercher le mot clé administrateur et le remplacer par hello formation, et enregistrer dans le fichier test.txt
    Supprimer toutes les lignes commentées et les lignes vides des fichiers de configuration vsftpd.conf, smb.conf, main.cf (ne pas modifier directement le fichier original)
    Utiliser la commande sed pour extraire votre propre adresse IP
    Utiliser la commande sed pour extraire en une seule fois l'adresse IP, l'adresse de diffusion et le masque de sous-réseau
    Commenter les lignes 2-3 et les lignes correspondant à celles commençant par administrateur ou par ftp

Réponses :

1、Remplacer les chiffres du fichier par un espace ou une tabulation
2、Supprimer les chiffres, deux-points et barres obliques des lignes 1-5 d'un fichier
3、Remplacer les lignes contenant le mot clé administrateur par hello formation, et enregistrer dans le fichier test.txt
4、Supprimer toutes les lignes commentées et les lignes vides des fichiers de configuration vsftpd.conf, smb.conf, main.cf (ne pas modifier directement le fichier original)
5、Utiliser la commande sed pour extraire sa propre adresse IP
# ifconfig eth0|sed -n '2p'|sed -n 's/.*addr://pg'|sed -n 's/Bcast.*//gp'
10.1.1.1  
# ifconfig eth0|sed -n '2p'|sed 's/.*addr://g'|sed 's/ Bcast:.*//g'
6、Utiliser la commande sed pour extraire en une seule fois l'adresse IP, l'adresse de diffusion et le masque de sous-réseau
# ifconfig eth0|sed -n '2p'|sed -n 's#.*addr:\(.*\) Bcast:\(.*\) Mask:\(.*\)#\1\n\2\n\3#p'
10.1.1.1 
10.1.1.255 
255.255.255.0

7、Commenter les lignes 2-3 et les lignes correspondant à celles commençant par administrateur ou par ftp
# sed -nr '2,3s/^/#&/p;s/^ADMIN|^ftp/#&/p' 1.txt
#ADMIN:x:0:0:administrateur:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#3daemon:x:2:2:daemon:/sbin:/sbin/nologin

# sed -ne '1,2s/^/#&/gp' donnees.txt -nre 's/^lp|^mail/#&/gp'
# sed -nr '1,2s/^/#&/gp;s/^lp|^mail/#&/gp' donnees.txt

  1. Projet Post-Cours

1、Écrire un script d'initialisation système 1) Modifier automatiquement le nom d'hôte (si l'IP est 192.168.0.88, alors le nom d'hôte devient serveur88.formation.cc)

a. Modifier le fichier de manière non interactive sed

/etc/sysconfig/network

b. Extraire l'IP de ce hôte et l'assigner à une variable ip; puis assigner le dernier chiffre de la variable ip (séparé par .) à une autre variable ip1

2)Configurer automatiquement une source yum disponible

3)Désactiver automatiquement le pare-feu et selinux

2、Écrire un script pour mettre en place un service ftp, avec les exigences suivantes : 1) Les utilisateurs locaux ne peuvent pas se connecter local_enable=NON 2) Les utilisateurs anonymes peuvent télécharger, créer et supprimer anon_upload_enable=OUI anon_mkdir_write_enable=OUI 3) Les utilisateurs anonymes sont limités à 500KBps anon_max_rate=500000

À titre de référence :
#!/bin/bash
ipaddr=`ifconfig eth0|sed -n '2p'|sed -e 's/.*inet addr:\(.*\) Bcast.*/\1/g'`
iptail=`echo $ipaddr|cut -d'.' -f4`
ipremote=192.168.1.10
#Modifier le nom d'hôte
hostname serveur$iptail.formation.com
sed -i "/HOSTNAME/cHOSTNAME=serveur$iptail.formation.com" /etc/sysconfig/network
echo "$ipaddr serveur$iptail.formation.cc" >>/etc/hosts
#Désactiver le pare-feu et selinux
service iptables stop
setenforce 0 >/dev/null 2>&1
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
#Configurer la source yum (généralement une source interne)
#test réseau
ping -c 1 $ipremote > /dev/null 2>&1
if [ $? -ne 0 ];then
    echo "Votre réseau n'est pas connecté, veuillez vérifier votre réseau"
    exit 1
else
    echo "Réseau ok."
fi
cat > /etc/yum.repos.d/server.repo << end
[server]
name=server
baseurl=ftp://$ipremote
enabled=1
gpgcheck=0
end

#Installer des logiciels
read -p "Veuillez saisir les logiciels à installer, séparés par des espaces :" soft
yum -y install $soft &>/dev/null

#Sauvegarder le fichier de configuration
conf=/etc/vsftpd/vsftpd.conf
\cp $conf $conf.default
#Modifier le fichier de configuration selon les besoins
sed -ir '/^#|^$/d' $conf
sed -i '/local_enable/c\local_enable=NON' $conf
sed -i '$a anon_upload_enable=OUI' $conf
sed -i '$a anon_mkdir_write_enable=OUI' $conf
sed -i '$a anon_other_write_enable=OUI' $conf
sed -i '$a anon_max_rate=512000' $conf
#Démarrer le service
service vsftpd restart &>/dev/null && echo"Le service vsftpd a démarré avec succès"

#Test et vérification
chmod 777 /var/ftp/pub
cp /etc/hosts /var/ftp/pub
#Test de téléchargement
cd /tmp
lftp $ipaddr <<end
cd pub
get hosts
exit
end

if [ -f /tmp/hosts ];then
    echo "Téléchargement anonyme réussi"
    rm -f /tmp/hosts
else
    echo "Échec du téléchargement anonyme"
fi
#Test de téléversement, création de répertoires, suppression de répertoires, etc.
cd /tmp
lftp $ipaddr << end
cd pub
mkdir test1
mkdir test2
put /etc/group
rmdir test2
exit
end

if [ -d /var/ftp/pub/test1 ];then
    echo "Création de répertoire réussie"
    if [ ! -d /var/ftp/pub/test2 ];then
        echo "Suppression de répertoire réussie"
        fi
else
    if [ -f /var/ftp/pub/group ];then
    echo "Téléversement de fichier réussi"
        else
        echo "Téléversement, création et suppression de répertoires pas ok"
        fi 
fi   
[ -f /var/ftp/pub/group ] && echo "Téléversement de fichier réussi"

Exercices

1,Supprimer le premier caractère de chaque ligne du fichier.

    sed -n 's/^.//gp' /etc/passwd  
    sed -nr 's/(.)(.*)/\2/p' /etc/passwd  

2,Supprimer le deuxième caractère de chaque ligne du fichier.

    sed -nr 's/(.)(.)(.*)/\1\3/p' /etc/passwd  

3,Supprimer le dernier caractère de chaque ligne du fichier.

    sed -nr 's/.$//p' /etc/passwd  
    sed -nr 's/(.*)(.)/\1/p' /etc/passwd  

4,Supprimer l'avant-dernier caractère de chaque ligne du fichier.

    sed -nr 's/(.*)(.)(.)/\1\3/p' /etc/passwd  

5,Supprimer le deuxième mot de chaque ligne du fichier.

    sed -nr 's/([^a-Z]*)([a-Z]+)([^a-Z]+)([a-Z]+)(.*)/\1\2\3\5/p' /etc/passwd  

6,Supprimer l'avant-dernier mot de chaque ligne du fichier.

    sed -nr 's/(.*)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]*)/\1\2\4\5\6/p' /etc/samba/smb.conf  

7,Supprimer le dernier mot de chaque ligne du fichier.

    sed -nr 's/(.*)([^a-Z]+)([a-Z]+)([^a-Z]*)/\1\2\4/p' /etc/samba/smb.conf  

8,Échanger le premier et le deuxième caractère de chaque ligne.

    sed -nr 's/(.)(.)(.*)/\2\1\3/p' /etc/passwd  

9,Échanger le premier et le deuxième mot de chaque ligne.

    sed -nr 's/([^a-Z]*)([a-Z]+)([^a-Z]+)([a-Z]+)(.*)/\1\4\3\2\5/p' /etc/samba/smb.conf  

10,Échanger le premier et le dernier mot de chaque ligne.

    sed -nr 's/([^a-Z]*)([a-Z]+)([^a-Z]+)([a-Z]+)(.*)/\1\4\3\2\5/p' /etc/passwd  

11,Supprimer tous les chiffres d'un fichier.

    sed 's/[0-9]*//g' /etc/passwd  

12,Supprimer tous les espaces au début de chaque ligne.

    sed -n 's/^\ *//p' /etc/samba/smb.conf   
    sed -nr 's/( *)(.*)/\2/p' testp  

13,Remplacer tous les espaces du fichier par des tabulations.

    sed -n 's/\ /\t/gp' pass   

14,Mettre toutes les lettres majuscules entre parenthèses ().

    sed -nr 's/([A-Z])/(&)/gp' testp   
    sed -n 's/[A-Z]/(&)/gp' testp  

15,Imprimer chaque ligne 3 fois.

    sed 'p;p' pass  

16,Supprimer toutes les lignes impaires.

    sed -n '1~2p' pass  

17,Copier les lignes 22 à 33 du fichier après la ligne 44.

    sed '1,21h;22h;23,33H;44G' pass  

18,Déplacer les lignes 22 à 33 du fichier après la ligne 44.

    sed '22{h;d};23,33{H;d};44G' pass  

19,Afficher uniquement le premier mot de chaque ligne.

    sed -nr 's/([^a-Z]*)([a-Z]+)([^a-Z]+)(.*)/\2/p' /etc/passwd  

20,Imprimer le premier et le troisième mot de chaque ligne.

    sed -nr 's/([^a-Z]*)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)(.*)/\2--\4/p' /etc/passwd  

21,Convertir le format de date mm/yy/dd en mm;yy;dd.

    date +%m/%Y/%d |sed -n 's#/#;#gp'  

Exercices sed :

1、Supprimer les espaces au début des lignes du fichier /etc/grub.conf ;
sed -r 's@^[[:space:]]+@@g' /etc/grub.conf
2、Remplacer le chiffre dans la ligne "id:3:initdefault:" du fichier /etc/inittab par 5 ;
sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab
3、Supprimer les lignes vides du fichier /etc/inittab ;
sed '/^$/d' /etc/inittab
4、Supprimer les # au début des lignes du fichier /etc/inittab;
sed 's@^#@@g' /etc/inittab
5、Supprimer les # au début des lignes et les espaces suivants dans un fichier, mais en exigeant qu'il y ait des espaces après le #;
sed -r 's@^#[[:space:]]+@@g' /etc/inittab
6、Supprimer les espaces au début et les # des lignes commençant par des espaces suivis de # dans un fichier;
sed -r 's@^[[:space:]]+#@@g' /etc/inittab
7,Extraire le nom de répertoire d'un chemin de fichier ;
echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'    
Nom de base :
echo "/etc/rc.d/" | sed -r 's@^/.*/([^/]+)/?@\1@g'    

Référence :

https://www.cnblogs.com/ctaixw/p/5860221.html

https://www.cnblogs.com/wangcp-2014/p/6756377.html

http://events.jianshu.io/p/e8d8d52fd62c

L'éditeur de texte sed traite les fichiers (ou entrées) ligne par ligne et envoie les résultats vers l'écran. Les commandes sed sont celles que l'on retrouve dans les éditeurs vi et ed/ex. sed stocke la ligne actuellement traitée dans une zone tampon temporaire, appelée espace de motif ou tampon temporaire. Après avoir traité la ligne dans l'espace de motif (c'est-à-dire après avoir exécuté la commande sed sur cette ligne), sed envoie la ligne vers l'écran (sauf si une commande précédente a supprimé cette ligne ou annulé l'impression). Une fois la dernière ligne du fichier d'entrée traitée, sed termine son exécution. Comme sed travaille sur une copie de chaque ligne dans la zone tampon, il ne modifie ni ne détruit le fichier source.

Étiquettes: sed traitement de texte Expressions Régulières Shell

Publié le 14 juin à 20h46