Joey Asked: 2017-12-23 13:45:56 +0800 CST2017-12-23 13:45:56 +0800 CST 2017-12-23 13:45:56 +0800 CST 更改从文本文件显示的日期格式 772 这段代码 grep -i 'logged in' path-to-file | tail | awk '{ print $6,"logged in at",substr($2,1,8),"on",$1"."; }' | sed 's/"//g' 将输出 昵称 2017-12-22 22:06:58 登录。 我想要的是这样输出: 昵称于 2017 年 12 月 22 日晚上 10:06:58 登录。 shell awk 1 个回答 Voted Best Answer msrd0 2017-12-23T14:00:36+08:002017-12-23T14:00:36+08:00 unixdate命令可以以您想要的任何格式打印日期。使用该--date标志,您可以打印与当前日期和时间不同的日期和时间。但是,对于date解析日期的命令,您必须删除输入日期中的on。您可以使用以下 sed 命令: sed -r 's,\s+on\s+, ,g' 结合您所需的输出格式,您将获得: date --date="$(echo '22:06:58 on 2017-12-22' | sed -r 's,\s+on\s+, ,g')" '+%r on %B %d, %Y' 现在,您只需要将它与您的 awk 命令结合使用,假设您始终具有相同的格式"username logged in at date" ,这可以很容易地完成。请注意,您可以完全不打印onawk,因此sed不再需要调用: while read line do echo $line | awk '{print $1" "$2" "$3" "$4" "}' | tr -d '\n' date --date="$(echo $line | awk '{print $5" "$7}' | tr -d '.')" '+%r on %B %d, %Y' done 对于您给出的示例,这将打印(使用 locale en-NZ): 昵称于 2017 年 12 月 22 日晚上 10:06:58 登录
unix
date
命令可以以您想要的任何格式打印日期。使用该--date
标志,您可以打印与当前日期和时间不同的日期和时间。但是,对于date
解析日期的命令,您必须删除输入日期中的on。您可以使用以下 sed 命令:结合您所需的输出格式,您将获得:
现在,您只需要将它与您的 awk 命令结合使用,假设您始终具有相同的格式"username logged in at date" ,这可以很容易地完成。请注意,您可以完全不打印on
awk
,因此sed
不再需要调用:对于您给出的示例,这将打印(使用 locale
en-NZ
):