我有一根绳子
STR="<trkpt lat="53.4829787887" lon="-113.518349362"><ele>682.0</ele><time>2020-01-09T01:00:01Z</time><speed>20.0</speed></trkpt>"
我试图用时间+1 秒替换时间。
为了实现这一目标,我有:
echo $STR | sed -e 's/<time>\(.*\)<\/time>/<time>'$(TZ=UTC date "+%Y-%m-%dT%H:%M:%SZ" -d "\1 + 1 seconds")'<\/time>/g'
但是我不断收到错误
date: invalid date ‘\\1 + 1 seconds’
为什么 \1 在子 shell $() 下被插值为 \\1?
有人可以帮助我错误的地方并帮助理解这里发生的事情吗?
使用 gnu sed 4.4。
答案1
我会使用适当的 XML 解析器做什么路径(不要sed
用于此任务):
输入文件
$ cat file.xml
<trkpt lat="53.4829787887" lon="-113.518349362">
<ele>682.0</ele>
<time>2020-01-09T01:00:01Z</time>
<speed>20.0</speed>
</trkpt>
您可以编辑在飞行中和xmlstarlet ed -L -u ...
命令
d=$(xmlstarlet sel -t -v '/trkpt/time/text()' file.xml)
xmlstarlet ed -u '/trkpt/time/text()' -v $(
TZ=UTC date "+%Y-%m-%dT%H:%M:%SZ" -d "$d + 1 seconds"
) file.xml
输出
<?xml version="1.0"?>
<trkpt lat="53.4829787887" lon="-113.518349362">
<ele>682.0</ele>
<time>2020-01-09T01:00:02Z</time>
<speed>20.0</speed>
</trkpt>