logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

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 → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 10:08]
Hypathie [Les adressages de la commande s]
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 141: Ligne 138:
  
 </​note>​ </​note>​
- +===Adressage ​du n° de ligne===
-=== Adressage ​avec numéro ​de lignes ​=== +
- +
-  * Exemple avec la commande de suppression ''​d''​+
  
 <code user> <code user>
-sed '3,4 d' ~/sed1.txt+sed -r '6s/BBB/​toto/' ​sed1.txt 
 </​code>​ </​code>​
 <​code>​ <​code>​
 aaaa aaaa
 BBB BBB
 +cCcC
 +#
 12345 12345
 +toto
 +titi cCcC
 +/​coucou/​titi
 </​code>​ </​code>​
-> pas d'​option : rien n'est modifié 
->''​d''​ : commande de suppression 
->''​3,​4''​ : ligne 3 et 4 
  
-  * option ''​-e''​ et répétition le commande ''​d'' :+=== Adressage ​d'un champ avec numéro de lignes ===
  
 +  * Exemple de la ligne 2 à la ligne 4
 <code user> <code user>
-sed -e '3d; 4d' ~/sed1.txt+sed '2,4s/.*/​GAGA/' ​sed1.txt
 </​code>​ </​code>​
 <​code>​ <​code>​
 aaaa aaaa
-BBB+GAGA 
 +GAGA 
 +GAGA
 12345 12345
-</​code>​ 
-=== Adressage avec n° d'​occurrence (fonctionne sur une ligne)=== 
-<code user> 
-echo "​lalalala"​ | sed -e '​s/​la/​li/​2'​ 
-</​code>​ 
-<​code>​ 
-lalilala 
 </​code>​ </​code>​
  
-===Adressage ​du n° de ligne pour la substitution=== +===Adressage de ligne(s) avec délimiteur "/​regexp/"​=== 
-Idem que précédemment,​ on place le n° devant ​la commande !\\  +On remplace chaineB par chaineC pour la ou les ligne(s) adressées par chaineA 
-Mais attention ici il s'agit de la substitution ''​s'​' :+ 
 +  sed '/chaineA/s/​chaineB/​chaineC/​' ​fichier
  
 <code user> <code user>
-sed -r '6s/BBB/toto/' sed1.txt +sed '/BBB/s/BBB/GAGA/' sed1.txt
- +
-</​code>​ +
-<​code>​ +
-aaaa +
-BBB +
-cCcC +
-+
-12345 +
-toto +
-titi cCcC +
-/coucou/titi +
-</​code>​ +
-===Adressage avec délimiteurs "/ /" :=== +
-soit le fichier sed2.txt +
-<​code>​ +
-aaaa +
-BBB titi +
-cCcC +
-+
-12345 +
-BBB +
-titi cCcC +
-titi BBB +
-/​coucou/​titi+
 </​code>​ </​code>​
 +ou 
 <code user> <code user>
-sed '/^B/d' ~/sed2.txt+sed -r '/B{3}/s/BBB/​GAGA/'​ sed1.txt
 </​code>​ </​code>​
-> Dans le délimiteur,​ on place la chaîne de caractères ou la regexp qui indique à sed où doit être fait l'​action de la commande. 
 <​code>​ <​code>​
 aaaa aaaa
 +GAGA
 cCcC cCcC
 # #
 12345 12345
 +GAGA
 titi cCcC titi cCcC
-titi BBB 
 </​code>​ </​code>​
  
Ligne 228: Ligne 199:
 </​code>​ </​code>​
  
-===Adressage mixte=== +===Adressages mixtes : 'n,/regexp/' ​ ​ou ​'/regexp/,n' ​===
-''​n'' ​et ''​m''​ sont des nombres entiers naturels+
  
-  * sed 'n,ms/chaine 1/chaine 2/' ​fichier+__1) 'n,/regexp/s/chaineA/​chaineB'__
  
->On remplace ​chaine 1 par chaine 2 de la ligne n à la ligne m.+''​n''​ est un nombre entier. 
 +On remplace ​chaîneA ​par chaîneB ​de la ligne ''​n'' ​à la ligne comportant /regexp/.\\
  
-  * sed '/​chaine 1/s/chaine 2/chaine 3/' ​fichier +  * Préparation : fichier ​"​sed1.txt 
- +<code> 
->On remplace chaine ​par chaine ​pour la ou les ligne(s) adressées par chaine ​1.+AAAA fraise 
 +BBB orange 
 +AAAA 6 cerise 
 +BBB abricot 
 +9 AAAA pomme 
 +BBB 5 poire 
 +</​code>​
  
 +  * Substitution de la ligne n° 2 jusqu'​à la ligne de chaîne "​cerise"​
 <code user> <code user>
-cat sed1.txt +sed '​2,/​cerise/​s/​[[:​digit:​]]/​GAGA/' ​sed1.txt
-aaaa +
-BBB +
-cCcC +
-+
-12345 +
-BBB +
-titi cCcC+
 </​code>​ </​code>​
 +<​code>​
 +AAAA 2 fraise
 +GAGA BBB orange
 +AAAA GAGA cerise
 +BBB 1 abricot
 +9 AAAA pomme
 +BBB 5 poire
 +</​code>​
 +
 +__2) '/​regexp/​ns/​chaîneA/​chaîneB/'​__
 +
 +  * Substitution à partir de la chaîne "​orange"​ jusqu'​à la ligne n° 5
  
 <code user> <code user>
-sed '2,6s/BBB/​GAGA/'​ sed1.txt+sed '/orange/,5s/[[:digit:]]/​GAGA/'​ sed1.txt
 </​code>​ </​code>​
-ou+<​code>​ 
 +AAAA 2 fraise 
 +GAGA BBB orange 
 +AAAA GAGA cerise 
 +BBB GAGA abricot 
 +GAGA AAAA pomme 
 +BBB 5 poire 
 +</​code>​ 
 + 
 +<note important>​ 
 +Il faut trois "​genres d'​objets"​. Car si /regexp/ d'​adressage correspond à chaîne, alors n n'​arrêtera pas la substitution.
 <code user> <code user>
-sed -r '2,6s/B{3}/​GAGA/'​ sed1.txt+sed '/​[[:​digit:​]]/​,3s/[[:digit:]]/​GAGA/'​ sed1.txt
 </​code>​ </​code>​
 +> Cette ligne ne remplacera pas un chiffre par "​GAGA"​ de la première ligne où il y a un chiffre à la ligne 3.
 <​code>​ <​code>​
-aaaa +AAAA GAGA fraise 
-GAGA +GAGA BBB orange 
-cCcC +AAAA GAGA cerise 
-+BBB GAGA abricot 
-12345 +GAGA AAAA pomme 
-GAGA +BBB GAGA poire
-titi cCcC+
 </​code>​ </​code>​
 +</​note>​
  
 +=== Adressage avec n° d'​occurrence (fonctionne sur une ligne)===
 <code user> <code user>
-sed '/BBB/s/BBB/GAGA/' ​sed1.txt+echo "​lalalala"​ | sed -e 's/la/li/2' 
 +</​code>​ 
 +<​code>​ 
 +lalilala 
 +</​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>​
-ou  
 <code user> <code user>
-sed -r '/B{3}/s/BBB/GAGA/' ​sed1.txt+  ​sed -r 'N;s/^(.*)\n\1$/X/g' ​essai
 </​code>​ </​code>​
 <​code>​ <​code>​
-aaaa +X 
-GAGA +coucou coucou
-cCcC +
-+
-12345 +
-GAGA +
-titi cCcC+
 </​code>​ </​code>​
  
Ligne 388: Ligne 388:
 </​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====
utilisateurs/hypathie/tutos/sed-et-les-expressions-rationnelles.txt · Dernière modification: 09/08/2014 07:30 par Hypathie

Pied de page des forums

Propulsé par FluxBB