PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Forums Hébergement > Forum Serveur - Sécurité et techniques > fr.comp.os.unix > remplacement de chaine specifique
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
fr.comp.os.unix Système UNIX.

remplacement de chaine specifique

Réponse
 
LinkBack Outils de la discussion
Vieux 19/04/2006, 16h49   #1 (permalink)
Laurent
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut remplacement de chaine specifique

Bonjour.

J'ai un besoin urgent de faire un traitement sur un fichier texte, et
comme je ne suis pas très versé dans l'art du shell, je me tourne vers
vous tous

J'ai un relativement gros fichier texte (environ 40000 longues lignes),
donc, dans lequel on trouve des dates au format jj/mm/aaaa, que je
souhaiterais remplacer par les mêmes dates au format aaaa-mm-jj.
Ces dates ne sont pas disposées dans les mêmes colonnes, et ne sont pas
forcement en nombre identique en fonction des lignes.

Quelqu'un pourrait-il me dire comment faire ça autrement qu'à la main ?
  Réponse avec citation
Vieux 19/04/2006, 17h13   #2 (permalink)
Arnaud Launay
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: remplacement de chaine specifique

Le Wed, 19 Apr 2006 17:49:08 +0200, Laurent écrivit:
> J'ai un relativement gros fichier texte (environ 40000 longues lignes),
> donc, dans lequel on trouve des dates au format jj/mm/aaaa, que je
> souhaiterais remplacer par les mêmes dates au format aaaa-mm-jj.
> Ces dates ne sont pas disposées dans les mêmes colonnes, et ne sont pas
> forcement en nombre identique en fonction des lignes.
> Quelqu'un pourrait-il me dire comment faire ça autrement qu'à la main ?


Avec une regexp sous vim, ça devrait pouvoir marcher, si tu es
sûr de ton format:

:%s#\(\d\d\)\/\(\d\d\)\/\(\d\d\d\d\)#\3-\2-\1#g

Arnaud.
--
Perso: http://launay.org/blog/
Hébergement: http://www.nocworld.com/
  Réponse avec citation
Vieux 19/04/2006, 17h20   #3 (permalink)
Luc Habert
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: remplacement de chaine specifique

Laurent :

> Bonjour.
>
> J'ai un besoin urgent de faire un traitement sur un fichier texte, et
> comme je ne suis pas très versé dans l'art du shell, je me tourne vers
> vous tous
>
> J'ai un relativement gros fichier texte (environ 40000 longues lignes),
> donc, dans lequel on trouve des dates au format jj/mm/aaaa, que je
> souhaiterais remplacer par les mêmes dates au format aaaa-mm-jj.


sed 's|\([0-9][0-9]\)/\([0-9][0-9]\)/\([0-9][0-9][0-9][0-9]\)|\3-\2-\1|g' < source > resultat

Attention à l'erreur classique: il ne faut pas mettre pour «resultat» le
même nom de fichier que «source», sinon tu écrases «source» avant que
sed ait commencé à le lire.

  Réponse avec citation
Vieux 19/04/2006, 19h28   #4 (permalink)
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: remplacement de chaine specifique

On Wed, 19 Apr 2006 17:49:08 +0200, Laurent wrote:
[...]
> J'ai un relativement gros fichier texte (environ 40000 longues lignes),
> donc, dans lequel on trouve des dates au format jj/mm/aaaa, que je
> souhaiterais remplacer par les mêmes dates au format aaaa-mm-jj.
> Ces dates ne sont pas disposées dans les mêmes colonnes, et ne sont pas
> forcement en nombre identique en fonction des lignes.
>
> Quelqu'un pourrait-il me dire comment faire ça autrement qu'à la main ?


perl -pi -e 's#(\d\d)/(\d\d)/(\d{4})#$3-$3-$1#g' fichier

--
Stephane
  Réponse avec citation
Vieux 19/04/2006, 19h37   #5 (permalink)
Croco
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: remplacement de chaine specifique

Le 19-04-2006, Stephane Chazelas <stephane_chazelas@yahoo.fr> a écrit:
> On Wed, 19 Apr 2006 17:49:08 +0200, Laurent wrote:
> [...]
>> J'ai un relativement gros fichier texte (environ 40000 longues lignes),
>> donc, dans lequel on trouve des dates au format jj/mm/aaaa, que je
>> souhaiterais remplacer par les mêmes dates au format aaaa-mm-jj.
>> Ces dates ne sont pas disposées dans les mêmes colonnes, et ne sont pas
>> forcement en nombre identique en fonction des lignes.
>>
>> Quelqu'un pourrait-il me dire comment faire ça autrement qu'à la main ?

>
> perl -pi -e 's#(\d\d)/(\d\d)/(\d{4})#$3-$3-$1#g' fichier


perl -pi -e 's#(\d\d)/(\d\d)/(\d{4})#$3-$2-$1#g' fichier

plutôt, non ?

Croco
  Réponse avec citation
Vieux 20/04/2006, 00h06   #6 (permalink)
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: remplacement de chaine specifique

2006-04-19, 16:13(+00), Arnaud Launay:
> Le Wed, 19 Apr 2006 17:49:08 +0200, Laurent écrivit:
>> J'ai un relativement gros fichier texte (environ 40000 longues lignes),
>> donc, dans lequel on trouve des dates au format jj/mm/aaaa, que je
>> souhaiterais remplacer par les mêmes dates au format aaaa-mm-jj.
>> Ces dates ne sont pas disposées dans les mêmes colonnes, et ne sont pas
>> forcement en nombre identique en fonction des lignes.
>> Quelqu'un pourrait-il me dire comment faire ça autrement qu'à la main ?

>
> Avec une regexp sous vim, ça devrait pouvoir marcher, si tu es
> sûr de ton format:
>
> :%s#\(\d\d\)\/\(\d\d\)\/\(\d\d\d\d\)#\3-\2-\1#g


Avec vim, on peux plus simplement faire:

:%s#\v(\d\d)/(\d\d)/(\d{4})#\3-\2-\1#g

\v, c'est pour "very magic"

--
Stéphane
  Réponse avec citation
Vieux 20/04/2006, 02h24   #7 (permalink)
Sébastien Monbrun aka TiChou
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: remplacement de chaine specifique

Dans le message <news:e2600q$1kpe$1@cantal.sis.pasteur.fr>,
*Croco* tapota sur f.c.o.unix :

> Stephane Chazelas a écrit :
>> perl -pi -e 's#(\d\d)/(\d\d)/(\d{4})#$3-$3-$1#g' fichier


> perl -pi -e 's#(\d\d)/(\d\d)/(\d{4})#$3-$2-$1#g' fichier
> plutôt, non ?


Voir :

perl -pi~ -e 's#(\d\d)/(\d\d)/(\d{4})#$3-$2-$1#g' fichier

On s'assure ainsi de garder une copie de sauvegarde.

--
Sébastien Monbrun aka TiChou

  Réponse avec citation
Vieux 20/04/2006, 09h40   #8 (permalink)
Arnaud Launay
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: remplacement de chaine specifique

Le Thu, 20 Apr 2006 00:06:17 +0100, Stephane Chazelas écrivit:
> > :%s#\(\d\d\)\/\(\d\d\)\/\(\d\d\d\d\)#\3-\2-\1#g

> Avec vim, on peux plus simplement faire:
> :%s#\v(\d\d)/(\d\d)/(\d{4})#\3-\2-\1#g
> \v, c'est pour "very magic"


Connaissais pas. Sympa, comme option. ViM, c'est de la balle

Arnaud.
--
Perso: http://launay.org/blog/
Hébergement: http://www.nocworld.com/
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 14h32.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,36402 seconds with 16 queries