Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

remplacement de chaine specifique

26 réponses
Avatar
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.
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 ?

10 réponses

1 2 3
Avatar
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#(dd)/(dd)/(dddd)#3-2-1#g

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

Avatar
lhabert
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.

Avatar
Stephane Chazelas
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#(dd)/(dd)/(d{4})#$3-$3-$1#g' fichier

--
Stephane

Avatar
Croco
Le 19-04-2006, Stephane Chazelas 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#(dd)/(dd)/(d{4})#$3-$3-$1#g' fichier


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

plutôt, non ? ;)

Croco


Avatar
Stephane Chazelas
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#(dd)/(dd)/(dddd)#3-2-1#g


Avec vim, on peux plus simplement faire:

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

v, c'est pour "very magic" :)

--
Stéphane


Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:e2600q$1kpe$,
*Croco* tapota sur f.c.o.unix :

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


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


Voir :

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

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

--
Sébastien Monbrun aka TiChou


Avatar
Arnaud Launay
Le Thu, 20 Apr 2006 00:06:17 +0100, Stephane Chazelas écrivit:
:%s#(dd)/(dd)/(dddd)#3-2-1#g
Avec vim, on peux plus simplement faire:

:%s#v(dd)/(dd)/(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/


Avatar
Laurent
Quelqu'un pourrait-il me dire comment faire ça autrement qu'à la main ?


pour la petite histoire ...

avec sed : temps réel 29.04 , 95%CPU
avec perl: temps réel 7.00 , 94%CPU (suis impressionné là !)

vim : une 50aine de secondes, mais j'ai pas pu chronométrer précisément..

En tout cas, merci à tous, je me voyais pas faire plus 150000
remplacement à la mano :)

Avatar
Stephane Zuckerman
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.

--698110915-969806716-1145523254=:439509
Content-Type: TEXT/PLAIN; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8BIT

On Thu, 20 Apr 2006, Arnaud Launay wrote:

Le Thu, 20 Apr 2006 00:06:17 +0100, Stephane Chazelas écrivit:
:%s#(dd)/(dd)/(dddd)#3-2-1#g
Avec vim, on peux plus simplement faire:

:%s#v(dd)/(dd)/(d{4})#3-2-1#g
v, c'est pour "very magic" :)


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

Espèce de djeun's.

--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)
--698110915-969806716-1145523254=:439509--



Avatar
Arnaud Launay
Le Thu, 20 Apr 2006 10:54:14 +0200, Stephane Zuckerman écrivit:
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.


Bravo, gamin.

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

1 2 3