#1 Le 26/08/2010, à 15:46
- iuchiban
SED - Appliquer un traitement à la partie matchee et l'afficher
Bonjour tout le monde,
Nouveau problème sur sed.
j'ai des fichiers de logs dont la date n'est pas en format "utile"
Les lignes sont de type :
TEXTE [DATE_FORMAT_POURRI] TEXTE
avec FORMAT_POURRI :
[13/Oct/2009:10:25:06 +0200]
avec la commande suivante, je transforme la date en format que je veux :
date -d "$(head -1 fichier | cut -d"[" -f2 | cut -d"]" -f1 | tr "[:punct:]" " " | awk '{print $2" "$1" "$3" "$4":"$5":"$6}')" +%Y%m%d-%H%M%S
qui transforme format pourri en
Oct 13 2009 10:25:06
puis
date -d "Oct 13 2009 10:25:06" me donne le bon format
avec la commande suivante je remplace bien ma date par TOTO :
sed 's/\[.*\]/TOTO/' fichier
Je voudrais donc :
- trouver ma date (qui est \[\(.*\)\]
- lui appliquer le traitement
- afficher la nouvelle date à la place de l'ancienne
J'imagine que c'est faisable et ça m'aiderais à apprendre sed (si je trouve pas, je ferai un script à la place, mais c'est moins "propre" )
Merci.
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#2 Le 26/08/2010, à 15:55
- survietamine
Re : SED - Appliquer un traitement à la partie matchee et l'afficher
salut, je n'ai pas compris pourquoi tu utilises `sed` si au final tu a besoin de la chaîne complète pour la commande `date -d`
Ðɸ Ƴơц ℕεєđ Şø₥€ √іêŤąɱίɳƸʂ ?
Hors ligne
#3 Le 26/08/2010, à 15:56
- bennyboy
Re : SED - Appliquer un traitement à la partie matchee et l'afficher
Alors tu dois mettre ta date dans le sed entre parenthèses: \[(.*)\]
Et au lieu de toto tu peux mettre des backtits (`) et mettre entre la commande que tu souhaite executer avec \1 (ça c'est la valeur entre parenthèses.
Tu devrais donc avoir un truc dans le style:
sed 's/\[(.*)\]/`date -d "\1"`/' fichier
Dernière modification par bennyboy (Le 26/08/2010, à 15:57)
T'es tellement no-life que t'aimerais être un PC pour redémarrer ta vie en mode sans échec !
"Ubuntu" - an African word meaning "Gentoo is too hard for me".
Un wiki inutile (ou presque)
Un github inutile (ou presque)
Hors ligne
#4 Le 27/08/2010, à 15:09
- credenhill
Re : SED - Appliquer un traitement à la partie matchee et l'afficher
hello
conversion de la date avec awk et date
$ cat a1
TEXTE [13/Oct/2009:10:25:06 +0200] TEXTE
$ awk -F"[][/:+]" '{b=" " ; "date -d " "\"" $2 b $3 b $4 b $5 ":" $6 ":" $7 "\""|getline d;sub("[[].*[]]", "[" d "]"); print}' a1
TEXTE [Tue Oct 13 10:25:06 CEST 2009] TEXTE
$
Hors ligne
#5 Le 27/08/2010, à 15:44
- Totor
Re : SED - Appliquer un traitement à la partie matchee et l'afficher
Dans le même esprit :
while IFS="[]/:" read -a values
do echo "${values[0]}[$(date -d "${values[2]} ${values[1]} ${values[3]} ${values[4]}:${values[5]}:${values[6]}")]${values[7]}"
done < fichier
edit : correction pour éviter des bugs :
while IFS="[]/:" read texte1 d1 d2 d3 d4 d5 d6 texte2
do
echo "${texte1}[$(date -d "${d2} ${d1} ${d3} ${d4}:${d5}:${d6}")]${texte2}"
done < fichier
ce qui revient au même !
Dernière modification par Totor (Le 30/08/2010, à 16:19)
-- Lucid Lynx --
Hors ligne