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' file | Cré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 | ||
\A | Début de chaîne | ||
$ | Fin d'une chaine, ou fin de ligne dans un motif multiligne | ||
\Z | Fin d'une chaine | ||
\b | Limite de mot | ||
\B | pas de limite de mot | ||
\< | Début d'un mot | ||
\> | Fin d'un mot |
Classes de Charactères | |||
---|---|---|---|
\c | Caractère de contrôle | ||
\s | espace | ||
\S | pas d'espace | ||
\d | Chiffre | ||
\D | pas de chiffre | ||
\w | mot | ||
\W | pas de mot | ||
\x | chiffre exadécimal | ||
\O | Chiffre 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 | ||
\Q | Commencer la séquence littérale | ||
\E | Fin de la séquence littérale |
Métacaractères communs | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
^ | [ | . | $ | { | * | ( | \ | + | ) | | | ? | < | > | \ |
Pattern d'expression | explication | exemple | resultat |
---|---|---|---|
. | 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/" monfichier | remplace toutes les lettre qui ne sont pas des numéro par Majuscu[...]t |
Caractère spéciaux | |||
---|---|---|---|
\n | Nouvelle ligne | ||
\r | Retour chariot | ||
\t | Tabulation | ||
\v | Barre vertical (pipe) | ||
\f | Saut de formulataire | ||
\xxx | Caractère octal xxx | ||
\xhh | Caractè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 | ||
\x | Numéro de groupe/sous-modèle "x" Les gammes sont inclusives. |
Modificateurs de motif | |||
---|---|---|---|
g | Correspondance 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 | |||
---|---|---|---|
$n | Nième groupe non passif | ||
$2 | "xyz" dans /^(abc(xyz))$/ | ||
$1 | "xyz" dans /^(?:abc)(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) | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Autres commandes utilisants les Regex | ||||
---|---|---|---|---|
find | find . | 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 |