【问题标题】:shell script to replace date format in an xml document [duplicate]用于替换 xml 文档中的日期格式的 shell 脚本 [重复]
【发布时间】:2023-04-11 03:50:01
【问题描述】:

可能重复:
How can I change the format of a date from the command line?

我正在运行一个下载和 XML 文件的夜间 cron 作业。 XML 文件的日期格式如下:

<date>2011-09-30</date>

我想设置第二个 cron 作业,将每个日期更改为如下格式:

<date>September 30</date>

然后保存文件。

有没有使用 shell 脚本的好方法?

【问题讨论】:

  • 我确信这可以通过调用 sed 来完成......但我个人我会使用像 nokogiri.org 这样的 XML 工具来做这样的事情。只是个人喜好,因为如果格式发生变化等,使用字符串替换来破解 XML 会导致问题。
  • @Kansha,看我的帖子,这就是我在 shell 中展示纯 Xpath 解决方案的原因。

标签: shell date cron


【解决方案1】:

你可以用这个:

date '+%Y-%m-%dT%T.%N'

【讨论】:

  • 你能解释一下我如何使用它吗?
【解决方案2】:

使用Xpath 和shell 工具的解决方案:

XML 示例:

$ cat sample.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<doc>
<date>2011-09-30</date>
</doc>

使用xmllintXpath 获取日期:

$ 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")

使用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>

【讨论】:

  • 所以我正在运行以下 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 并且服务器给了我以下错误:line 5: xmlstarlet: command not found(这是给朋友的,不幸的是他使用了 godaddy)
  • 错误很明显:你需要安装xmlstarlet。
【解决方案3】:

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

【讨论】:

  • 我在本地运行,但 Godaddy 的 shell 抛出错误:date: invalid option -- 'j'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 2012-09-13
  • 2010-11-26
  • 2016-10-26
  • 1970-01-01
  • 2020-06-30
相关资源
最近更新 更多