나에겐 밧줄이 있어요
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>