可能重复:
如何从命令行更改日期格式?
我正在运行一个下载和 XML 文件的夜间 cron 作业。XML 文件的日期格式如下:
<date>2011-09-30</date>
我想设置第二个 cron 作业,将每个日期更改为如下格式:
<date>September 30</date>
然后保存文件。
有没有用 shell 脚本来做这件事的好方法?
可能重复:
如何从命令行更改日期格式?
我正在运行一个下载和 XML 文件的夜间 cron 作业。XML 文件的日期格式如下:
<date>2011-09-30</date>
我想设置第二个 cron 作业,将每个日期更改为如下格式:
<date>September 30</date>
然后保存文件。
有没有用 shell 脚本来做这件事的好方法?
使用Xpath和 shell 工具的解决方案:
XML 示例:
$ cat sample.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<doc>
<date>2011-09-30</date>
</doc>
xmllint
使用Xpath获取日期:
$ dat=$(xmllint --xpath '/doc/date/text()' sample.xml )
$ echo $dat
2011-09-30
现在,翻译日期的格式:
$ new_dat=$(date -d "$dat" "+%B %d")
(如果您想要当前日期,只需使用new_dat=$(date "+%B %d")
)
使用以下命令编辑 xml xmlstarlet
:
$ xmlstarlet edit -L -u "/doc/date" -v "$new_dat" sample.xml
最后
$ cat sample.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<doc>
<date>septembre 30</date>
</doc>
你可以使用这个:
date '+%Y-%m-%dT%T.%N'
用于将具有一种日期格式的文件过滤(标准输入到标准输出)到另一种日期格式的 Bash 语法...
while read line; do
case "$line" in
'<date>'*)
echo '<date>'
date -j -f %F `echo "$line" | sed -e 's/<date>//' -e 's-</date>--'` '+%B %d'
echo '</date>'
;;
*)
echo "$line"
;;
esac
done