Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

#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


Et sinon, ma femme fait des bijoux goo.gl/2eUjdP
Ah, et je vends ma maison aussi! Si tu veux habiter à 25min de Paris en transports en commun, viens par ici, elle est comme neuve et n'utilise que des matériaux non propriétaires :p http://goo.gl/tuzTfp

En 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)

En 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


Et sinon, ma femme fait des bijoux goo.gl/2eUjdP
Ah, et je vends ma maison aussi! Si tu veux habiter à 25min de Paris en transports en commun, viens par ici, elle est comme neuve et n'utilise que des matériaux non propriétaires :p http://goo.gl/tuzTfp

En 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

En 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

Haut de page ↑