Remplacez les dates au format «Mois Date Heure» par les dates au format «Mois Année Date Heure» dans plusieurs fichiers.

0

J'ai des fichiers dans un répertoire qui contiennent des dates formatées comme:

December 29 19:05:58

Mais ils diffèrent en fonction de la date à laquelle le fichier a été créé.

Existe-t-il un moyen d'effectuer une recherche-remplacement sur ces fichiers pour remplacer les dates par des dates telles que:

December 29 2010 19:05:58

Je suis sous Mac OS X.

EDIT: Pour clarifier, tout script serait bon, à savoir: sedou scripts shell / ruby.

Wuffers
la source

Réponses:

1

Je ne pense pas que ce soit possible sans un éditeur de texte puissant ou un script.


Utilisez l'expression régulière suivante dans TextMate:

Chercher:

(January|February|March|April|May|June|July|August|September|October|November|December) (\d{1,2}) (\d{2}:\d{2}:\d{2})

Remplacer par:

$1 $2 2010 $2

En fonction du nombre de fichiers, les scripts seraient plus rapides. J'opterais pour un éditeur comme TextMate si le travail ne demandait pas trop d'efforts. Ainsi, vous pourrez vérifier chaque remplacement avant d'enregistrer.


Par souci d'exhaustivité:

cat src.txt | sed "s/\([A-Z][a-z]\{1,\} [0-9]\{1,2\}\) \([0-9][0-9]:[0-9][0-9]:[0-9][0-9]\)/\1 2010 \2/g" > dest.txt

Les gens qui utilisent sedrégulièrement peuvent rire maintenant, je m'en fiche.

Daniel Beck
la source
L'écriture est bien, alors ça sedmarcherait?
Wuffers
@ Mark Je ne suis pas un sedutilisateur - attendez peut-être quelques minutes;)
Daniel Beck
@ DanielBeck: Je pense que je vais essayer le test de TextMate à cette fin, je vous ferai savoir comment ça se passe.
Wuffers
Vous pouvez utiliser \+au lieu de \{1,\}.
Dennis Williamson
1

Essayez ceci (pour OS X, remplacez le -rpar -E):

sed -r 's/(January|February|March|April|May|June|July|August|September|October|November|December)( [0-9 ][0-9] )(([0-9][0-9]:){2}[0-9][0-9])/\1\22010 \3/'
Dennis Williamson
la source
Toutes ces parenthèses n'auraient-elles pas besoin de s'échapper?
Daniel Beck
@ Daniel: Pas avec -rou -E.
Dennis Williamson