我有一个像 的日期2014-01-30 05:04:27 GMT
,如果我运行date -d "2014-01-30 05:04:27 GMT"
,输出将以我服务器的时区 ( Thu Jan 30 16:04:27 EST 2014
) 为单位。
通过使用 grep 和 cut,我从文件中提取了 GMT 日期。但是,我很难将其转换为我的本地时间。
例如:
grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'['
输出:2014-01-30 05:04:27 GMT
我可以在最后添加什么来将该输出传递给date -d
?
尝试:
grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | date -d
grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | date
grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | date -d "$1"
答案1
gmt="$(grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[')"
date -d "$gmt"
或者,如果您更喜欢管道格式:
grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | { read gmt ; date -d "$gmt" ; }
问题是date
不使用 stdin。因此,我们必须将 stdin 捕获到一个变量(gmt
此处称为)中,然后在命令行上将其提供给date
。
第二种方法的示例输出:
$ echo "2014-01-30 05:04:27 GMT" | { read gmt ; date -d "$gmt" ; }
Wed Jan 29 21:04:27 PST 2014
答案2
date -f
如果您使用的是来自足够新的 coreutils 的 GNU 日期,则在帮助屏幕上有:
-f, --file=DATEFILE like --date once for each line of DATEFILE
因此你的第四次尝试可能是:
$ grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | date -f -
最后一个-
代表标准输入。
答案3
只需使用标准输入作为文件:
command | date --file=-