J'ai une date comme "2014-01-30 05:04:27 GMT", et si je cours Date -D "2014-01-30 05:04:27 GMT", la sortie est dans le fuseau horaire de mon serveur ("Thu 30 janvier 16:04:27 EST 2014 ").
Avec l'utilisation de GREP et de coupe, j'ai extrait la date dans GMT à partir d'un fichier. Cependant, j'ai du mal à convertir cela en mon temps local.
Par exemple:
[Utilisateur @ journal du serveur] # grep "quelque chose" logfile.txt | grep "a réussi" | Couper -f1 -d '['
Sortie: 2014-01-30 05:04:27 GMT
Que puis-je ajouter à la fin, passer cette sortie à "Date -D"?
Tentative:
gmt="$(grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[')"
date -d "$gmt"
Ou, si vous préférez le format de pipeline:
grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | { read gmt ; date -d "$gmt" ; }
Le problème est que date
n'utilise pas stdin. Ainsi, nous devons capturer la STDIN dans une variable (appelée gmt
ici), puis fournir celle de la ligne de commande à date
.
Échantillon de sortie de la deuxième approche:
$ echo "2014-01-30 05:04:27 GMT" | { read gmt ; date -d "$gmt" ; }
Wed Jan 29 21:04:27 PST 2014
Si vous utilisez GNU date à partir d'un Coreutils suffisamment récent, il y a date -f
, à partir de l'écran d'aide:
-f, --file=DATEFILE like --date once for each line of DATEFILE
Donc, votre tentative 4 aurait pu être:
$ grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | date -f -
le dernier -
signifie STDIN.