Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换xml文档中日期格式的shell脚本_Shell_Date_Cron - Fatal编程技术网

替换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'
您能解释一下我如何使用它吗?