Contenu | Rechercher | Menus

Annonce

Ubuntu-fr.org recrute toujours de nouveaux modérateurs, avec de l'expérience.

Ubuntu 16.04 LTS
Réservez vos DVD et clé USB Ubuntu-fr (premières livraisons mi-mai)

Si vous avez des soucis pour rester connecté, déconnectez vous et reconnectez vous depuis ce lien en cochant le case
Me connecter automatiquement lors de mes prochaines visites.

M.A.J. en cours du forum possibilité de bug, nous faisons le maximum pour les résoudre au plus vite

#1 Le 10/12/2012, à 12:03

cervo

Expressions régulières et sed

Salut,

Je cherche à parser un CSV en ruby via FasterCSV. Le problème est que mon fichier contient des lignes comme :
1) un truc,autre chose,"Let's Play Halo 3 Part 9.5 ""Escape, High Charity""",bidule,machin
2) un truc,autre chose,"Let's Play Halo 3 Part 9.5 "Escape', High Charity",bidule,machin

Mon séparateur est donc la virgule.
Dans le 1er cas, il me parse en prenant la virgule comme séparateur, donc me retourne un Array ["truc", "autre chose", "Let's Play Halo 3 Part 9.5 ""Escape", "High Charity", "bidule", "machin"]
Dans le 2ème cas, une erreur "illegal quoting" m'est retournée.

J'aimerai donc utiliser sed pour supprimer tout contenu entre guillemets, ça donnerait : truc,autre chose,deleted,bidule,machin
Mais j'ai beau utiliser des regexp dans tous les sens, le résultat que j'obtiens n'est pas bon... J'imagine que c'est du aux quotes imbriquées, je ne sais pas comment lui indiquer la bonne expression. J'arrive à m'en sortir avec des regexp simples, mais là je cale.

Si jamais un champion des expressions régulières pouvait me venir en aide, il illuminerait ma journée, voire ma semaine smile

Merci bien

Hors ligne

#2 Le 10/12/2012, à 12:21

pingouinux

Re : Expressions régulières et sed

Bonjour,

$ cat fichier
1) un truc,autre chose,"Let's Play Halo 3 Part 9.5 ""Escape, High Charity""",bidule,machin
2) un truc,autre chose,"Let's Play Halo 3 Part 9.5 "Escape', High Charity",bidule,machin

$ sed -r s'/^([^"]*)".*",([^"]*)$/\1\2/' fichier
1) un truc,autre chose,bidule,machin
2) un truc,autre chose,bidule,machin

Ajouté : Plus simple

$ sed -r s'/".*",//' fichier

Dernière modification par pingouinux (Le 10/12/2012, à 12:41)

Hors ligne

#3 Le 10/12/2012, à 12:26

cervo

Re : Expressions régulières et sed

Merci, mais :
1) j'aimerai remplacer le contenu, pas le supprimer, pour éviter de "casser" les colonnes du csv
2) ça ne fonctionne pas si la ligne comporte d'autre quotes
ex : un truc,autre chose,"Let's Play Halo 3 Part 9.5 ""Escape, High Charity""",bidule,"pouet, toto",machin
=> se transforme en : un truc,autre chose,machin

Hors ligne

#4 Le 10/12/2012, à 12:49

pingouinux

Re : Expressions régulières et sed

Sur la ligne n°2, les " " ne sont pas tous appariés.

$ sed -r s'/("[^"]*")+/deleted/g' fichier
1) un truc,autre chose,deleted,bidule,machin
2) un truc,autre chose,deletedEscape', High Charity",bidule,machin
3) un truc,autre chose,deleted,bidule,deleted,machin

Hors ligne

#5 Le 11/12/2012, à 17:41

credenhill

Re : Expressions régulières et sed

hello
et avec ça ?

$ cat fichier
un truc,autre chose,"Let's Play Halo 3 Part 9.5 ""Escape, High Charity""",bidule,machin
un truc,autre chose,"Let's Play Halo 3 Part 9.5 "Escape', High Charity",bidule,machin
un truc,autre chose,"Let's Play Halo 3 Part 9.5 ""Escape, High Charity""",bidule,"pouet, toto",machin
$ 
$ sed 's/,"/,+/g;s/",/+,/g;s/+[^+]*+/deleted/g' fichier
un truc,autre chose,deleted,bidule,machin
un truc,autre chose,deleted,bidule,machin
un truc,autre chose,deleted,bidule,deleted,machin
$ 

Hors ligne