Так как мы можем использовать apt, таким образом:
apt-get install mysql=8.0.15-1debian9
Мы можем использовать ansible apt таким же образом:
apt: name=mysql=8.0.15-1debian9 state=installed
Хотя это и возможно, очень, очень плохая идея пытаться анализировать XML или HTML с помощью таких инструментов, как sed
, основанных на регулярных выражениях. Это может сработать для простых случаев, но очень трудно сделать правильно даже для экспертов даже для немного более сложных случаев. Таким образом, используйте синтаксический анализатор XML, такой как xmlstarlet
(, который можно установить из репозиториев вашей операционной системы ):
$ xmlstarlet ed -d '//client/clientRef' file.xml
<?xml version="1.0"?>
<contracts>
<clients>
<client>
<name>Nicol</name>
</client>
<client>
<name>Basil</name>
</client>
</clients>
<entries>
<entry>
<regCode>BCG</regCode>
<clientRef>63352</clientRef>
</entry>
<entry>
<regCode>TYD</regCode>
<clientRef>3242</clientRef>
</entry>
</entries>
</contracts>
ed
означает «редактировать этот файл», а -d '//client/clientRef'
означает «удалить clientRef
записи в client
».
В этом конкретном случае вы также можете использовать простые инструменты -анализа текста, поэтому я приведу пример, но, пожалуйста, не делайте этого для чего-то более сложного, и имейте в виду, что он может сломаться даже при незначительное изменение входных данных:
$ awk '{
if(/<clients>/){a=1}
else if(/<\/clients>/){a=0}
if(/<clientRef>/ && a){ next}
}1;' file.xml
<contracts>
<clients>
<client>
<name>Nicol</name>
</client>
<client>
<name>Basil</name>
</client>
</clients>
<entries>
<entry>
<regCode>BCG</regCode>
<clientRef>63352</clientRef>
</entry>
<entry>
<regCode>TYD</regCode>
<clientRef>3242</clientRef>
</entry>
</entries>
</contracts>
Использование xq
синтаксического анализатора XML (части yq
), который является оболочкой для jq
(, поэтому он выполняет преобразование XML/JSON -кодирование):
$ xq -x 'del(.contracts.clients.client[].clientRef)' file.xml
<contracts>
<clients>
<client>
<name>Nicol</name>
</client>
<client>
<name>Basil</name>
</client>
</clients>
<entries>
<entry>
<regCode>BCG</regCode>
<clientRef>63352</clientRef>
</entry>
<entry>
<regCode>TYD</regCode>
<clientRef>3242</clientRef>
</entry>
</entries>
</contracts>