SED

SED
La commande sed est l'un des outils, si ce n'est "L'outil" le plus puissant du shell
bon nombre de "regexeur" vous diront que celui qui maitrise sed est le "roi du pêtrole" et pour cause!
sed permet de transformer tout un fichier, tout un site , tout un système en remplaçant une occurence par une autre. Il permet de chercher une occurence etc...
Les différents mode d'utilisation de sed
Remplacement
sed 's/bonjour M X /bonjoru M. Y/' <monfichier>permet de remplacer le 1er regex trouvé
s/regexp/remplacement/
sed 's/bonjour M X /bonjoru M. Y/g' <monfichier>permet de remplacer TOUT les regex trouvé
s/regexp/remplacement/g
sed 's/[[:alpha:]]//g' <monfichier>permet de remplacer TOUT les caractère alphabetiques d'un fichier
sed -i 's/monmotif//g' <monfichier> L'option -i permet de modifier directement le fichier de destination
/!\ écrase la copie originale (peut faire des dégats)
Changer le mode expression régulière en étendu
sed 's/[a-z]\{9\}//g' <monfichier>
sed -E 's/[a-z]{9}//g' <monfichier>
L'option -E permet de gérer les expression tégulière étendues, celà permet d'éviter d'échapper des expression tels que : {9} c.f. voir ERb et ERe plus loins.
Affichage
sed -n '/motif1/,/motif2/p' <monfichier>va afficher tout ce qui se trouve entre le motif1 et le motif2
Mode script
sed ':label command(s) t label' <monfichier>
reutilisation des patterns
sed 's/mot/ rajout avant & /' <monfichier>le & permet de réutiliser le pattern matché, ici on rajoute "rajout avant" chaque occurent de "mot"
sed 's/^.*\(mot1\).*\(mot2\)/ ici : \2 et la :\1 /' <monfichier>entre les \(\) on match un pattern ce qui devient:
ici : mot1 et la :mot2
sed ':a;N;$!ba;s/\n/ /g' fileCréez une étiquette via :a.
Ajoutez la ligne actuelle et la ligne suivante à l'espace de motif via N.
Si nous sommes avant la dernière ligne, branchez-vous sur l'étiquette créée $!ba( $!signifie ne pas le faire sur la dernière ligne car il devrait y avoir une nouvelle ligne finale).
Enfin, la substitution remplace chaque nouvelle ligne par un espace sur l'espace de motif (qui est le fichier entier).





Encres (positionnement face à un objet (ligne, mot, fichier))
^Début d'une chaine de caractère, d'une ligne, dans le cas d'un pattern multi-ligne
\ADébut de chaîne
$Fin d'une chaine, ou fin de ligne dans un motif multiligne
\ZFin d'une chaine
\bLimite de mot
\Bpas de limite de mot
\<Début d'un mot
\>Fin d'un mot
Classes de Charactères
\cCaractère de contrôle
\sespace
\Spas d'espace
\dChiffre
\Dpas de chiffre
\wmot
\Wpas de mot
\xchiffre exadécimal
\OChiffre octal
POSIX
[:upper:]Majuscule
[:lower:]Minuscules
[:alpha:]Lettres
[:alnum:]Chiffres et lettres
[:digit:]Chiffres
[:xdigit:]Chiffres exadécimal
[:punct:]Ponctuations
[:blank:]espace et tabulations
[:space:]Caractères vides
[:cntrl:]Caractères de contrôle
[:graph:]Caractères imprimés
[:print:]Caractères imprimés et espaces
[:word:]chiffres, lettres et underscore "_"
Conditions/affirmations
?=Affirmation anticipée
?!Anticipation négative
?<=Affirmation en arrière-plan
?!= or ?Regard négatif derrière
?>Sous-expression unique
?()Condition [if then]
?()|Condition [if then else]
?#Comment
Quantificateurs
*0 ou plus
{3}Exactement 3
+1 ou plus
{3,}3 ou plus
?0 ou 1
{3,5}3, 4 ou 5
ajouter ? à un quantificateur pour le rendre moins puissant
Caractère d'échappement
\Échappez au caractère suivant
\QCommencer la séquence littérale
\EFin de la séquence littérale
Métacaractères communs
^[.${*(\+)|?<>\
Pattern d'expressionexplication exempleresultat
. caractere quelqu onque grep -E "^....$" monfichier.txt afficher toutes les lignes comportant 4 caractere
^ debut de ligne grep "^c" monfichier.txt affiche toutes les lignes commençant par le caractère "c"
$ fin de ligne grep "e$" nouveau1 affiche toutes les lignes se terminant par le caractère "e"
. caractere grep "^c.*!" monfichier afficher toutes les lignes commençant par c
et ayant un nbr de caractère après lesquels on à le "!"
* replicateur (Ofois ou nfois) sed "s/(.*)/bonjour/" monfichier
sed "s/^e.*,/bonjour/" monfichier | cat
remplace les (nnnnnn) par bonjour
remplace "en raisonner, n'ayant pas un sol, j'écris sur la valeur de l'argent"
par "bonjour j'écris sur la valeur de l'argent"
+ replicateur non null au moins 1 fois "^e[a-z ?'-]+\." monfichiertexte patterne commençant par e, suivi de caractère [a-z] d'espace de point d'interrogation d'apostrophe de - et d'un point
? replicateur d option au plus 1 fois "^et .?.?" et ri | et me | et pa
\{n\}
{n} exactement n fois
{n,m} entre n et m fois
{n,} au minimum n fois
replicateur n fois -E "a{2,3}"
"a\{2,3\}"
reconnaît aa ou aaa.
[] enssemble de caractère "^[A-Z].*\." monfichier tout ce qui commençant par une majuscule jusqu'au point
[^xyz] en debut d enssemble tout sauf sed "s/^[^0-9]/Majusculeeletenculent/" monfichierremplace toutes les lettre qui ne sont pas des numéro par Majuscu[...]t
Caractère spéciaux
\nNouvelle ligne
\rRetour chariot
\tTabulation
\vBarre vertical (pipe)
\fSaut de formulataire
\xxxCaractère octal xxx
\xhhCaractère hexadécimal hh
Groupe de Plage
.Tout caractère sauf nouvelle ligne (\n)
(a|b)a ou b
(...)groupe
(?:...)Groupe passif (sans capture)
[abc]intervale (a ou b ou c)
[^abc]sauf (a ou b ou c)
[a-q]Lettre minuscule de a à q
[A-Q]Lettres Majuscules de a à q
[0-7]chiffres de 0 à 7
\xNuméro de groupe/sous-modèle "x" Les gammes sont inclusives.
Modificateurs de motif
gCorrespondance globale (général)
i *Insensible à la casse
m *multiple lignes
s *Traiter la chaîne comme une seule ligne
x *Autoriser les commentaires et les espaces dans le modèle
e *Évaluer le remplacement
U *Motif peu gourmand * Modificateur PCRE
Remplacement de chaîne
$nNième groupe non passif
$2"­xyz­" dans /^(abc­(xy­z))$/
$1"­xyz­" dans /^(?:a­bc)­(xyz)$/
$`avant la chaine matchée
$'apres la chaines matchée
$+derniere chaine matchée
$& Chaîne entière correspondante Certaines implémentations de regex utilisent \ au lieu de $.
Expression régulière Etendues et Basiques (-E)
ERb Expression Régulière Basique
Caractère spécialSignification
\{n\}n fois le caractère précédent
\{n,\}Au moins n fois le caractère précédent
\{n,x\}Entre n et x fois le caractère précédent
\(ERb\) Mémorisation d'une ERb
\1, \2, ... Rappel de mémorisation
ERe Expression Régulière Etendue
Caractère spécialSignification
?0 ou 1 fois le caractère ou regroupement précédent
+1 à n fois le caractère ou regroupement précédent
{n}n fois le caractère ou regroupement précédent
{n,}Au moins n fois le caractère ou regroupement précédent
{n,x}Entre n et x fois le caractère ou regroupement précédent
(er1)Regroupement
er1 | er2 | er3Alternatives





Autres commandes utilisants les Regex
findfind . | sed 's/[^/]*\//| /g;s/| *\([^| ]\)/+--- \1/'crée une arborescence
sed[OPTION]... {script-only-if-no-other-script} [input-file]...-n
-i
-s
d
mode silencieux (n'affiche que les paterne demandé)
applique directement les modification
substitution
supprimer
s/pattern/pattern/ =>(substitute)
"/pattern/pattern/p" => (print)
"/pattern/pattern/g" =>(générale) ne s'arrete pas à la première occurence
sed poussésed '/debut/,/fin/ s/.*//' test Affichez le contenu d'un fichier en supprimant les lignes comprises entre les lignes contenant les chaînes 'debut' et 'fin
sed "s/(.*)/bonjour/" monfichier
sed "s/^e.*,/bonjour/" monfichier | cat
sed "s/^[^0-9]/Majusculeeletenculent/" monfichier
sed '/^$/d' systeme/BlueMind.html supprimer les lignes vides