Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1871 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [expert][script][sed] Nieme occurence ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[expert][script][sed] Nieme occurence ?

n°1343175
goblin_rie​ur
ingé systemes unix
Posté le 16-08-2013 à 00:15:16  profilanswer
 

:hello: bonjour
 
j'ai une question de la mort qui tue maudite...pour vrais experts donc  :D y'a défis là  :D  
vu sur un autre forum une question intéressante dont le but est avec sed
de sélectionner un texte entre deux mots mais le second peut exister plusieurs fois, il faut donc prendre la 3ième occurrence disons...
 
par exemple

truc machin bidule
pattern0
d
pattern1
e
pattern1
f
pattern1
g  
pattern1
chose foo bar


 
ça sélectionnerai uniquement :

pattern0
d
pattern1
e
pattern1
f
pattern1


 
 
le principe de boucle pour faire ça sur 2ième occurrence aurait la structure suivante :

Code :
  1. /motif1/ {                           
  2.     :z                               
  3.     N                                 
  4.     /motif2$/ !b z                   
  5.     :y                               
  6.     N                                 
  7.     /.*\nmotif2$/ !b y               
  8.     N                                 
  9.     p                                 
  10.     q                                 
  11. }


 
je me disais donc pour la troisième il suffit d'ajouter encore une boucle de saut supplémentaire. mais c'est idiot par principe parce que si un jour on devait faire la même chose pour la 100ième  occurrence... le script sed serai plus gros que le ficher à trier... ;)
 
y a t il un moyen de faire une boucle en indiquant de manière chiffrée le nombre d’occurrences ou de boucle à faire.
 


---------------
Collectionner les vieux serveurs c'est chouette mais c'est lourd et ça prend de la place ;)
mood
Publicité
Posté le 16-08-2013 à 00:15:16  profilanswer
 

n°1343293
Profil sup​primé
Posté le 18-08-2013 à 16:27:53  answer
 

Bonjour, moi je sais pas, t'as droit à mettre ta commande sed dans un .sh ?

n°1343294
zipe31
Posté le 18-08-2013 à 17:20:46  profilanswer
 

Salut,
 
Une solution sûrement parmi d'autres...
 
Le fichier référence (plop) :

truc machin bidule
pattern0
d
pattern1
e
pattern1
f
pattern1
g  
pattern1
h
pattern1
i
pattern1
j
pattern1
k
pattern1
l
pattern1
m
pattern1
n
pattern1
o
chose foo bar


 
Le script sed (script.sed) :

Code :
  1. #n
  2. :z                                   
  3. N                                     
  4. $ !b z                               
  5. s/.*\(pattern0.*\)/\1/                   
  6. s/pattern1/&\n/10                 
  7. s/\n\n.*//p


 
Le résultat de la commande "sed -f script.sed plop" :

pattern0
d
pattern1
e
pattern1
f
pattern1
g  
pattern1
h
pattern1
i
pattern1
j
pattern1
k
pattern1
l
pattern1
m
pattern1


 
J'ai ciblé la 10ème occurrence (il y en a 11). Il n'y a qu'à changer le chiffre dans l'expression pour cibler l'occurrence de son choix  ;)  
 
Explications en gros.
 
le script charge tout le fichier dans le buffer principal de "sed".  

:z                                      
N                                      
$ !b z


 
Puis on élimine tout ce qui se trouve avant le 1er motif de référence.  

s/.*\(pattern0.*\)/\1/


 
On place un "tag" (ici j'ai choisi de rajouter une fin de ligne (\n) ce qui nous en fait 2 consécutives) après la 10ème occurrence du 2nd motif.  

s/pattern1/&\n/10


 
Et pour finir on supprime le "tag"  et tout ce qui se trouve après lui.

s/\n\n.*//p



---------------
$ man woman
n°1343307
goblin_rie​ur
ingé systemes unix
Posté le 18-08-2013 à 18:23:05  profilanswer
 

merci pas mal..


---------------
Collectionner les vieux serveurs c'est chouette mais c'est lourd et ça prend de la place ;)
n°1343363
zipe31
Posté le 19-08-2013 à 18:10:07  profilanswer
 

Tiens encore plus simple, avec un branchement conditionnel (si une substitution n' a pas été opérée, alors on boucle) :
 

Code :
  1. cat script.sed


#n
/pattern0/{
:z
N;
s/pattern1/&/4
Tz
p
}


 

Code :
  1. sed -f script.sed plop

 

pattern0
d
pattern1
e
pattern1
f
pattern1
g  
pattern1


 ;)


---------------
$ man woman

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [expert][script][sed] Nieme occurence ?

 

Sujets relatifs
Cegid EXPERT OnDemand et Cegid GED PGI EXPERTexécuter script bash sur un raccourcis
script impression multiple[Bash] Script de clean automatique de compte FTP
debian scriptdebian script
Script Shell de Restauration de dossiers Backupés sous Linux de puis 
Plus de sujets relatifs à : [expert][script][sed] Nieme occurence ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)