替换xml文档中日期格式的shell脚本
可能重复:替换xml文档中日期格式的shell脚本,shell,date,cron,Shell,Date,Cron,可能重复: 我每天晚上都在运行cron作业,下载XML文件。XML文件的日期格式如下: <date>2011-09-30</date> <date>September 30</date> 2011-09-30 我想设置第二个cron作业,将每个日期更改为如下格式: <date>2011-09-30</date> <date>September 30</date> 9月30日 然后保存文件
我每天晚上都在运行cron作业,下载XML文件。XML文件的日期格式如下:
<date>2011-09-30</date>
<date>September 30</date>
2011-09-30
我想设置第二个cron作业,将每个日期更改为如下格式:
<date>2011-09-30</date>
<date>September 30</date>
9月30日
然后保存文件
有没有一种很好的方法可以用shell脚本实现这一点?您可以使用以下方法:
date '+%Y-%m-%dT%T.%N'
使用和shell工具的解决方案:
XML示例:
$ cat sample.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<doc>
<date>2011-09-30</date>
</doc>
现在,翻译日期的格式:
$ new_dat=$(date -d "$dat" "+%B %d")
(如果您想要当前日期,只需使用new\u dat=$(日期“+%B%d”)
)
使用xmlstarlet
编辑xml:
$ 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>
$cat sample.xml
九月三十日
将一种日期格式的文件过滤到另一种日期格式的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
读行时;做
大写“$line”
''*)
回声“
日期-j-f%f`echo“$line”| sed-e的//'-e的--'`+%B%d'
回声“
;;
*)
回音“$line”
;;
以撒
完成
我相信这可以通过调用sed来完成。。。但就我个人而言,我会使用XML工具来做类似的事情。只是个人偏好,因为如果格式发生变化,用字符串替换来攻击XML会导致问题,等等@Kansha,请参阅我的帖子,这就是为什么我在shell中显示纯Xpath解决方案的原因。因此,我运行以下shell文件:#/bin/sh dat=$(xmllint--xpath'/doc/date/text()'path/to/file.xml new_dat=$(date-d“$dat”“+%B%d”))xmlstarlet edit-L-u“/doc/date”-v“$new_dat”path/to/file.xml
,服务器给我以下错误:第5行:找不到命令
(这是给一个不幸使用godaddy的朋友的)错误很明显:您需要安装xmlstarlet。我在本地实现了这一点,但是godaddy的shell抛出了一个错误:date:invalid选项--'j'
您能解释一下我如何使用它吗?