#regex #bash #shell #xmllint
#регулярное выражение #bash #оболочка #xmllint
Вопрос:
Я пытаюсь извлечь значение в сценарии оболочки с использованием xmllint, я смог найти и извлечь значения, сопоставив полные ключевые строки. Проблема в том, что для некоторых значений я просто знаю, с чего начинается ключ. Например: пусть часть xml будет:
<property>
<name>foo.bar.random_part_of_name</name>
<value> SOME_VALUE</value>
</property>
Я хочу извлечь весь этот сегмент и записать его в выходной файл.
До сих пор мне удавалось сопоставлять полные сегменты с
if (xmllint --xpath '//property[name/text()="foo.bar"]/value/text()' "$INPUT_FILE"); then
value=$(xmllint --xpath '//property[name/text()="foo.bar"]/value/text()' "$INPUT_FILE")
echo "<property><name>foo.bar</name><value>$value</value></property>">> $OUTPUT_FILE
fi
Заранее спасибо
Ответ №1:
Xpath 1.0 предлагает start-with(node, pattern)
функцию для выполнения того, что вы хотите
name="foo.bar"
value=$(xmllint --xpath "//property[starts-with(name,'$name')]/value/text()" test.xml)
if [ -n "$value" ]; then
echo "<property><name>$name</name><value>$value</value></property>"
fi
Результат:
<property><name>foo.bar</name><value> SOME_VALUE</value></property>