Вы можете сделать то, что вы хотите, так. Сначала выберите значение filename
и значение path
.
$ filenameVal=$(xmlstarlet sel -t -v "/annotation/filename" file)
$ pathVal=$(xmlstarlet sel -t -v "/annotation/path" file)
Затем определите имя каталога path
через $(dirname $pathVal)
и объедините $filenameVal
с ним. Вы можете выполнить тестовый прогон без редактирования файла следующим образом:
$ xmlstarlet ed -u "/annotation/path" -v "$(dirname $pathVal)/$filenameVal" file
<?xml version="1.0"?>
<annotation>
<folder>cars_train</folder>
<filename>00001.jpg</filename>
<path>Users/hantaoliu/Documents/Research/cars_train/00001.jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
</size>
</annotation>
Если все выглядит хорошо, вы можете добавить переключатель -L
, который говорит xmlstartlet
редактировать на месте.
$ xmlstarlet ed -L -u "/annotation/path" -v "$(dirname $pathVal)/$filenameVal" file
Подтверждение результатов в file
:
$ cat file
<?xml version="1.0"?>
<annotation>
<folder>cars_train</folder>
<filename>00001.jpg</filename>
<path>Users/hantaoliu/Documents/Research/cars_train/00001.jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
</size>
</annotation>
Ссылки