regex

regex - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 29-04-2013 à 19:00:49    

Bonjour à tous,
 
Je cherche à séparer une chaine contenant soit un séparateur ";" ou " ;"  ou bien un saut de ligne "\n".
 
Mon texte est du genre:

Code :
  1. AAA-BBB-CCC-0010; AAA-BBB-CCC-0020 ; AAA-BBB-CCC-0030
  2. AAA-BBB-CCC-0050


 
J'ai pensé faire une regex de la forme:

Code :
  1. ([^\;\s\n]+)

 
mais cela ne marche pas comme je veux ...
 
Après je me suis demandé comment faire pour préciser dans une regex, que je voulais prendre la 3e occurence ou la 4e occurence d'un pattern ?
 
Y-a-t-il quelqu'un qui masterise en regex et qui pourrait m'aider ?
 
Merci pour votre aide.

Reply

Marsh Posté le 29-04-2013 à 19:00:49   

Reply

Marsh Posté le 29-04-2013 à 23:03:29    

J'imagine que les données seront traitées ligne par ligne, donc le "\n" n'est pas un séparateur de champ :??:  
Le pattern " *; *" ne suffit pas ?


Message édité par mrbebert le 29-04-2013 à 23:03:41

---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 30-04-2013 à 00:41:43    

Bonsoir,
Les données ne sont pas traitées ligne par ligne.

Reply

Marsh Posté le 05-06-2013 à 23:26:01    

je suis nul en sed et awk mais pourquoi pas remplacer toutes les ; par des \n (à supposer que le fichier soit intégralement comme ça

 

j'ai donc ceci, en copiant-collant honteusement un sed trouvé sur google pour enlever les espaces au début de chaque ligne

 

tr ";" \\n < test | sed -e 's/^[ \t]*//'

 

ce qui me donne

 

AAA-BBB-CCC-0010
AAA-BBB-CCC-0020
AAA-BBB-CCC-0030
AAA-BBB-CCC-0050

 

avec un espace à la fin de la deuxième ligne, qu'on pourrait aussi enlever, donc :
tr ";" \\n < test | sed 's/^[ \t]*//;s/[ \t]*$//'
on pourrait ainsi se contenter d'attraper la n-ième ligne pour avoir la valeur. sed '/^$/d' supprime toutes lignes vides.

 

Sinon, je ne comprends pas trop ce que tu entends par "Je veux séparer une chaîne" ni ce qu'est censée faire ta regexp.


Message édité par blazkowicz le 05-06-2013 à 23:30:20
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed