Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format
PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
utilisateurs:hypathie:tutos:sed-et-les-expressions-rationnelles [23/07/2014 07:45] Hypathie [Sed et les regexp simples] |
utilisateurs:hypathie:tutos:sed-et-les-expressions-rationnelles [27/07/2014 08:41] Hypathie [L'adressage] |
||
---|---|---|---|
Ligne 33: | Ligne 33: | ||
- expression régulière :\\ ''*'' -> zéro ou plusieurs fois l'élément précédent (b*BABA -> BABA, bBABA, bbBABA, bbbBABA, etc.) | - expression régulière :\\ ''*'' -> zéro ou plusieurs fois l'élément précédent (b*BABA -> BABA, bBABA, bbBABA, bbbBABA, etc.) | ||
- expression régulière :\\ ''.*'' -> zéro ou plusieurs occurrence(s) de n'importe quel caractère | - expression régulière :\\ ''.*'' -> zéro ou plusieurs occurrence(s) de n'importe quel caractère | ||
- | |||
- | -> **Il s'y ajoute pour sed __le caractère__ ''&'' :**\\ | ||
- | - **''&''** : Représente la chaîne à remplacer((ce qu'on ajoute autour de ''&'' est ajouté à la chaîne remplacée)). | ||
-> __**utilisation des classes**__ : | -> __**utilisation des classes**__ : | ||
Ligne 108: | Ligne 105: | ||
>Pour REGEXP, on peut utiliser la syntaxe habituelle, ou la syntaxe étendue avec l'option ''-r''. | >Pour REGEXP, on peut utiliser la syntaxe habituelle, ou la syntaxe étendue avec l'option ''-r''. | ||
- | =====L'adressage ===== | + | =====Les adressages de la commande s ===== |
===Préparation=== | ===Préparation=== | ||
<code user> | <code user> | ||
Ligne 194: | Ligne 191: | ||
/coucou/titi | /coucou/titi | ||
</code> | </code> | ||
+ | |||
+ | ===Adressage du retour chariot === | ||
+ | Par exemple, pour matcher une chaîne constituée de deux chaînes égales séparées par un retour à la ligne, du fichier essai : | ||
+ | <code> | ||
+ | abcd | ||
+ | abcd | ||
+ | coucou coucou | ||
+ | </code> | ||
+ | <code user> | ||
+ | sed -r 'N;s/^(.*)\n\1$/X/g' essai | ||
+ | </code> | ||
+ | <code> | ||
+ | X | ||
+ | coucou coucou | ||
+ | </code> | ||
+ | |||
===Adressage avec délimiteurs "/ /" :=== | ===Adressage avec délimiteurs "/ /" :=== | ||
soit le fichier sed2.txt | soit le fichier sed2.txt | ||
Ligne 220: | Ligne 233: | ||
</code> | </code> | ||
- | ===Adressage d'une plage avec délimiteurs "/ /,/ /" :=== | + | ===Adressage mixte : "ns/regexp/chaine" === |
+ | ''n'' est un nombre entier. | ||
+ | On remplace chaineA par chaineB à la ligne ''n''.\\ | ||
+ | |||
+ | Soit le fichier "sed1.txt": | ||
<code user> | <code user> | ||
- | sed '/^B/,/^1/d' ~/sed1.txt | + | cat sed1.txt |
+ | aaaa | ||
+ | BBB | ||
+ | cCcC | ||
+ | # | ||
+ | 12345 | ||
+ | BBB | ||
+ | titi cCcC | ||
+ | </code> | ||
+ | |||
+ | <code user> | ||
+ | sed -n '6s/BBB/GAGA/p' sed1.txt | ||
</code> | </code> | ||
<code> | <code> | ||
- | aaaa | + | GAGA |
</code> | </code> | ||
- | ===Adressage mixte=== | + | === Adressage mixte pour une plage, "n,ms/regxp/chaine/=== |
- | ''n'' et ''m'' sont des nombres entiers naturels | + | ''n'' et ''m'' sont des nombres entiers.\\ |
+ | On remplace chaineA par chaineB de la ligne n à la ligne m.\\ | ||
+ | Soit le même fichier "sed1.txt" que précédemment. | ||
- | * sed 'n,ms/chaine 1/chaine 2/' fichier | + | sed 'n,ms/chaineA/chaineB/' fichier |
- | + | ||
- | >On remplace chaine 1 par chaine 2 de la ligne n à la ligne m. | + | |
- | + | ||
- | * sed '/chaine 1/s/chaine 2/chaine 3/' fichier | + | |
- | + | ||
- | >On remplace chaine 2 par chaine 3 pour la ou les ligne(s) adressées par chaine 1. | + | |
<code user> | <code user> | ||
Ligne 251: | Ligne 275: | ||
<code user> | <code user> | ||
- | sed '2,6s/BBB/GAGA/' sed1.txt | + | sed -r -n '2,6s/B{3}/GAGA/p' sed1.txt |
- | </code> | + | |
- | ou | + | |
- | <code user> | + | |
- | sed -r '2,6s/B{3}/GAGA/' sed1.txt | + | |
</code> | </code> | ||
<code> | <code> | ||
- | aaaa | + | GAGA titi |
GAGA | GAGA | ||
- | cCcC | ||
- | # | ||
- | 12345 | ||
- | GAGA | ||
- | titi cCcC | ||
</code> | </code> | ||
+ | |||
+ | ===Adressage de ligne(s) avec délimiteur "/regexp/" devant s=== | ||
+ | On remplace chaineB par chaineC pour la ou les ligne(s) adressées par chaineA | ||
+ | |||
+ | sed '/chaineA/s/chaineB/chaineC/' fichier | ||
<code user> | <code user> | ||
Ligne 283: | Ligne 303: | ||
titi cCcC | titi cCcC | ||
</code> | </code> | ||
+ | ===Adressage d'une plage avec délimiteurs "/ /,/ /" :=== | ||
+ | <code user> | ||
+ | sed '/^B/,/^1/d' ~/sed1.txt | ||
+ | </code> | ||
+ | <code> | ||
+ | aaaa | ||
+ | </code> | ||
=== Adressage avec le tilde=== | === Adressage avec le tilde=== | ||
<code text man sed> | <code text man sed> | ||
Ligne 388: | Ligne 414: | ||
</code> | </code> | ||
+ | ===Le caractère & === | ||
+ | **''&''** : Représente la chaîne à remplacer.\\ | ||
+ | Si le signe ''&'' est présent dans le motif de remplacement, alors, il sera substitué par le motif de recherche en entier. | ||
+ | <code text sed1.txt> | ||
+ | aaaa | ||
+ | BBB titi | ||
+ | cCcC | ||
+ | # | ||
+ | 12345 | ||
+ | BBB | ||
+ | titi cCcC | ||
+ | titi BBB | ||
+ | /coucou/titi | ||
+ | </code> | ||
+ | |||
+ | * Entourer de crochet la chaîne "12345" | ||
+ | |||
+ | <code user> | ||
+ | sed 's/[0-9][0-9]*$/[&]/' sed1.txt | ||
+ | </code> | ||
+ | <code> | ||
+ | aaaa | ||
+ | BBB | ||
+ | cCcC | ||
+ | # | ||
+ | [12345] | ||
+ | BBB | ||
+ | titi cCcC | ||
+ | </code> | ||
+ | |||
+ | * Faire ensorte que le fichier "sed1.txt" ne comporte deux lignes "titi grominet" | ||
+ | <code user> | ||
+ | sed -re 's/titi/& grosminet/' -e\ | ||
+ | '/titi/!d' -e\ | ||
+ | 's/(BBB|cCcC)//' -e\ | ||
+ | '/^ /d' -e\ | ||
+ | '/^\/.*/d' -i\ | ||
+ | sed1.txt | ||
+ | </code> | ||
+ | |||
+ | <code user> | ||
+ | cat sed1.txt | ||
+ | </code> | ||
+ | <code> | ||
+ | titi grosminet | ||
+ | titi grosminet | ||
+ | </code> | ||
+ | |||
+ | ===le caractère de désignation de champ \n === | ||
+ | ''n'' est le numéro de champ d'une partie du motif de recherche, chaque partie du motif de recherche étant délimitée ainsi ''\(sous-motif\)''. | ||
+ | * Exemple inverser la deuxième ligne de "sed1.txt" | ||
+ | <code user> | ||
+ | |||
+ | </code> | ||
+ | sed -e '2s/\(titi\) \(grosminet\)/\2 \1/g' sed1.txt | ||
+ | <code> | ||
+ | titi grosminet | ||
+ | grosminet titi | ||
+ | </code> | ||
=====Sed et les regexp simples ===== | =====Sed et les regexp simples ===== | ||
====Explications==== | ====Explications==== |