私にはロープがあります。
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 が \\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>