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
doc:systeme:sed [25/01/2021 14:27]
Croutons [Préparation aux exemples d'illustration de ce tuto :]
doc:systeme:sed [30/09/2023 22:14]
captnfab [Lien :]
Ligne 551: Ligne 551:
 //Merci à //​**cthulu**//​ Hop !// LOL //Merci à //​**cthulu**//​ Hop !// LOL
  
-===== Lien : =====+===== Sed et recherche de motif non-gourmande ​=====
  
-  * Partage ​d'​une ​petite astuce avec sed (et autres commandes à regex) ​+  * Création par [[user>​David5647]] 31/​08/​2020 
-    [[doc:sed-non-greedy-pattern|sed-non-greedy-pattern]]+  * Commentaires sur le forum : [[https://​debian-facile.org/​viewtopic.php?​pid=341973#​p341973]] 
 + 
 +==== Comportement par défaut ==== 
 + 
 +Par défaut, lors de la recherche ​d'​une ​expression régulière,​ la correspondance retournée par sed est la plus longue chaîne de caractères possible. 
 + 
 +Soit le texte suivant
 +<​code>​Une 1ère phrase. Une deuxième phrase. Une troisième phrase. Une quatrième phrase!</​code>​ 
 +Extraire la première phrase c'est lister tout les caractères jusqu'​au premier point, soit l'​expression régulière : 
 +<​code>​.*/​.</​code>​ 
 + 
 +Mais une telle recherche renvoie la plus longue chaîne possible: 
 +<code user>​echo "Une 1ère phrase. Une deuxième phrase. Une troisième phrase. Une quatrième phrase!"​ | sed -r '​s/​(.*\.).*/​\1/'</​code>​ 
 +<​code>​Une 1ère phrase. Une deuxième phrase. Une troisième phrase.</​code>​ 
 + 
 +==== Recherche ​non-gourmande ==== 
 + 
 +Pour effectuer une recherche plus restrictive et trouver la plus petite chaîne correspondante,​ il suffit simplement de rechercher tout les caractères sauf le point. Soit l'​expression régulière suivante: 
 +<​code>​[^.]*\.</​code>​ 
 +On obtient alors : 
 +<code user>​echo "Une 1ère phrase. Une deuxième phrase. Une troisième phrase. Une quatrième phrase!" ​| sed -r '​s/​([^.]*\.).*/​\1/'</​code>​ 
 +<​code>​Une 1ère phrase.</​code>​ 
 + 
 +==== Aller plus loin ==== 
 + 
 +En répétant la motif plusieurs fois, on peut alors extraire toutes les correspondances. Soit l'​expression régulière:​ 
 +<​code>​([^.]*\.){$i}</​code>​ avec i le nombre de répétitions 
 + 
 +Soit dans une boucle: 
 +<code user>for i in 1 2 3; do  
 +   echo "Une 1ère phrase. Une deuxième phrase. Une troisième phrase. Une quatrième phrase!"​ | sed -r "​s/​([^.]*\.){$i}.*/​\1/"​ ; 
 +done</​code>​ 
 +<​code>​Une 1ère phrase. 
 + Une deuxième phrase. 
 + Une troisième phrase.</​code>​ 
 + 
 +Voilà, c'est bête, mais j'ai cherché longtemps :P 
 +===== Lien : =====
  
   * http://​www.funix.org/​fr/​unix/​expr-sed.htm#​haut   * http://​www.funix.org/​fr/​unix/​expr-sed.htm#​haut
doc/systeme/sed.txt · Dernière modification: 30/09/2023 22:14 par captnfab

Pied de page des forums

Propulsé par FluxBB