Используйте инструмент XML-осознанным. Это сделает ваш подход более надежным: это означает, что крошечные изменения в текстовом описании (например, добавленные или удаленные новые строки или дополнительные атрибуты, добавленные в существующий элемент) не нарушат ваш скрипт.
Предполагая, что структура вашей входной выглядит следующим образом (с бытием в рамках одного родительского элемента, здесь называется item
, определяя отношения между name
и value
):
<config>
<item><name>abcdef</name><value>123456</value></item>
<item><name>fedcba</name><value>654321</value></item>
</config>
... Вы можете редактировать его как так:
# edit the value under an item having name "abcdef"
xmlstarlet ed -u '//item[name="abcdef"]/value' -v "new-value"
Если вместо того, чтобы это так (с упорядоченность между парами имя/значение с описанием их отношения):
<config>
<name>abcdef</name><value>123456</value>
<name>fedcba</name><value>654321</value>
</config>
... то вы можете изменить его, как так:
# update the value immediately following a name of "abcdef"
xmlstarlet ed -u '//name[. = "abcdef"]/following-sibling::value[1]' -v new-value
[BeautifulSoup] (https://www.crummy.com/software/BeautifulSoup/bs4/doc/) это хороший способ читать теги из html. –
Как выглядит ваша структура? Является ли это ' k1 v1 k2 v2 '?Или это ' k1 v1 k2 v2 '? Мы не можем предоставить семантически-осознанный ответ, если мы не знаем структуру. –
... и, если быть понятным, ответ, который * не является * семантически осведомленным, будет обязательно ошибкой: он не сможет отличить комментарии и разделы CDATA и литерал. –