在bash中将输出从日期文本更改为可用格式

时间:2018-08-23 20:20:49

标签: bash

我不太确定如何表达这个问题,但是这里是:

我有一个命令以``adDateLastConnected:2018年8月23日,星期四12:00:07 PM''的格式返回与应用程序的上次连接日期。我设法去除了第一部分,只显示了日期,但我想以更标准的日期格式(例如08-23-2018 12:00:07 PM)查看。

这是一件小事,还是比我怀疑的要复杂得多?我不确定我的无知有多深:-)

2 个答案:

答案 0 :(得分:3)

GNU日期对于解释人类风格的日期格式非常有用:

#!/bin/bash
if [[ $(date --version) != *GNU* ]]
then
  echo "Sorry, this script only works with GNU date." >&2
  exit 1
fi

# Make locale independent
export LC_ALL=C

# Strip the " at " part
x="${1// at / }"

echo "ISO time:  $(date --iso-8601=seconds -d "$x")"
echo "Unix time: $(date -d "$x" +%s)"

示例:

$ ./myscript "Thursday, August 23, 2018 at 12:00:07 PM"
ISO time:  2018-08-23T12:00:07-07:00
Unix time: 1535050807

答案 1 :(得分:0)

这并不困难。您可以使用sed或gawk(awk)进行格式化,其中任何一种都可以为您完成工作。

AWK的示例:

awk '
   BEGIN { FS = OFS = "," } 
   { split($3, date, /\//)
     $3 = date[3] "-" date[2] "-" date[1]
     print $0 
   }
' infile