如何将输出传递给date -d“值”?


14

我有一个类似“ 2014-01-30 05:04:27 GMT”的日期,如果我运行日期-d“ 2014-01-30 05:04:27 GMT”,则输出在我服务器的时区(“ Thu 2014年1月30日16:04:27”)。

通过使用grep和cut,我从文件中提取了GMT中的日期。但是,我正在努力将其转换为本地时间。

例如:

[user @ server日志]#grep“某事” logfile.txt | grep“成功” | 切-f1 -d'['

输出:2014-01-30 05:04:27 GMT

我可以在末尾添加什么,以将该输出传递给“ date -d”?

尝试:

  • [user @ server日志]#grep“某事” logfile.txt | grep“成功” | 切-f1 -d'['| 日期-d
  • [user @ server日志]#grep“某事” logfile.txt | grep“成功” | 切-f1 -d'['| 日期
  • [user @ server日志]#grep“某事” logfile.txt | grep“成功” | 切-f1 -d'['| date -d“ $ 1”

Answers:


13
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

1
谢谢,解决了这个问题!还要感谢您解释其不起作用的原因。
Shane 2014年

19

如果您使用的是来自最新的coreutils的GNU date date -f,请在帮助屏幕中找到:

-f, --file=DATEFILE       like --date once for each line of DATEFILE

因此,您的尝试4可能是:

$ grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | date -f -

最后-代表标准输入。


2
这应该是公认的答案。
Petrus K.

是否可以将上述命令的输出与特定日期进行比较。例如。我需要列出所有早于“ 2014年1月30日星期三21:04:27 PST”的日期
Manu

@Manu不是本身,dateutilsdategrep针对具体使用情况。
hroptatyr

这非常容易!如果我能读的话,我可能会在他的手册页中找到它。
肯·夏普
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.