【问题标题】:How to format following bash/sh/shell date如何格式化以下 bash/sh/shell 日期
【发布时间】:2016-09-16 13:54:57
【问题描述】:

如何将此“2016 年 5 月 18 日下午 1:05:30 EDT”格式化为 +%Y-%m-%d 00:00:00

JayOSX:~ jay$ d=$(defaults read /Library/Preferences/com.someapp.some.plist LastUpdated)      

回声“$d”

##returns
May 18, 2016 at 1:05:30 PM EDT

我试过了:

date -j -f "%b %d, %Y at %l:%M:S %Z" "$(defaults read /Library/Preferences/com.someapp.some.plist LastUpdated)” + "%Y-%m-%d 00:00:00"

我收到以下错误:

Failed conversion of ``%d,'' using format ``“%b''
date: illegal time format
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... 
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

【问题讨论】:

  • 您尝试过的引用,这些是您真正使用的引用吗?注意区别:你的:,正确的引号:"
  • 感谢您的更正。我在实际环境中运行它时使用了正确的引号。
  • @jay 您已编辑问题,以便不再出现报告的错误。你还有问题吗?
  • 不,它仍然会发生。
  • 使用 awk 可以做到吗?

标签: bash macos shell sh


【解决方案1】:

给你,

创建 infile.txt :

echo "May 18, 2016 at 1:05:30 PM EDT" > infile

现在我们有了:

[za]$ cat infile.txt 
May 18, 2016 at 1:05:30 PM EDT

可以做到这一点的班轮。仅供参考,"%s-%s-%s %s %s:%s:%s \n", $4 , $1 , $2 , $3 , $6 , $7 , $8 是重新格式化的内容。

 [za]$ awk -F'[ "\t" :,]' '{printf "%s-%s-%s %s  %s:%s:%s  \n", $4 , $1 , $2 , $3  , $6 , $7 , $8  }' infile.txt

输出:

 2016-May-18   1:05:30 

快速测试。

echo May 18, 2016 at 1:05:30 PM EDT | awk -F'[ "\t" :,]' '{printf "%s-%s-%s %s  %s:%s:%s  \n", $4 , $1 , $2 , $3  , $6 , $7 , $8  }'

我希望这会有所帮助;)。

【讨论】:

  • 绝对有帮助,但我需要它的输出是“2016-05-18 00:00:00”
  • 嗨,在我的 mac 上,它打印的是 "05" 而不是 May 。 d=$(defaults read /Library/Preferences/com.someapp.some.plist LastUpdated) 2016-05-19 15:19:57.548 defaults[11384:186690] ... 所以,检查如何使源输出正确的格式。
猜你喜欢
  • 2013-05-08
  • 1970-01-01
  • 2022-01-12
  • 2020-12-03
  • 2011-11-22
  • 1970-01-01
  • 2021-05-03
  • 2020-07-15
  • 1970-01-01
相关资源
最近更新 更多