Группа group 2
, а неgroup 3
:
xmlstarlet sel -t \
-v '//Key[Key/Value[@name="rsv-login-name" and @data="name3"]]/Value[@name="rsv-group-name"]/@data' -nl file.xml
Или со значением запроса, взятым из командной строки:
xmlstarlet sel -t --var data="'name3'" \
-v '//Key[Key/Value[@name="rsv-login-name" and @data=$data]]/Value[@name="rsv-group-name"]/@data' -nl file.xml
Как вариант,
xmlstarlet sel -t --var data="'name3'" \
-m '//Key/Key/Value[@name="rsv-login-name" and @data=$data]' \
-v '../../Value[@name="rsv-group-name"]/@data' -nl file.xml
Результатом любого из них будет group 2
.
Запрос XPath ищет узел Key/Key/Value
, который имеет name="rsv-login-name"
и data="name3"
, и для узла Key
, для которого этот узел является узлом Key/Value
, возвращает атрибут data
для Value
узел с name="rsv-group-name"
.
XML, который я использовал здесь, представляет собой слегка измененный документ, в который добавлен тег <root>
в начале и конечный тег </root>
в конце, чтобы сделать его хорошо -сформированным XML-документом.
#!/bin/bash
for i in *; do
echo "Old file: $i"
new=$(echo "$i" | sed -e 's/\s*(.*)//g')
echo "New file: $new"
done
Старый файл :abc (csd ).mp4 Новый файл :abc.mp4 Старый файл :деф (123 ).mp4 Новый файл :def.mp4
Просто замените echo на mv "$i" "$new".