Я очень давно не писал bash и пытаюсь найти лучшее решение этой проблемы. Я думаю, что sed или awk будут использоваться, но я не уверен, как это сделать.
У меня есть этот xml-файл:
<Projects>
<Project Guid = "46824750-4e2d-46bd-bb6d-7c229cde63d5" Name = "Example 1" Type = "1" LastModified = "2020-09-28T20:44:35.36Z" Version = "36.0" />
<Project Guid = "d1137da2-041c-1f3e-a92b-48b2db9663c8" Name = "Example 2" Type = "5" LastModified = "2020-03-24T21:19:48.517Z" Version = "5.0" />
<Project Guid = "46824750-4c2d-49c5-8a6c-2c229cff63d5" Name = "Example 3" Type = "2" LastModified = "2020-01-03T18:14:05.047Z" Version = "3.2" />
</Projects>
В сценарии bash мне нужно найти строку, содержащую Type="1", и извлечь этот Guid из той же строки. Обратите внимание, что только один файл в каждом XML-файле будет содержать Type="1". Можно ли для этого использовать sed? Или мне придется пройти маршрут синтаксического анализа xml?
Я не могу установить дополнительные зависимости или библиотеки, так как это работает на агенте Jenkins, и процесс утверждения зависимостей долгий и строгий. В идеале это можно было бы сделать с помощью встроенной функциональности Bash/UNIX.
Любые идеи о лучшем подходе к этому?
Хотя это и не лучший инструмент для работы, sed можно использовать. Пожалуйста попробуйте
sed -n '/Type = "1"/s/.*Guid = "\([^"]*\).*/\1/p' file.xml
Протестировано с GNU sed 4.8
Что было бы лучше? Мне нужно только что-то, что может надежно выполнить этот очень конкретный вариант использования, не более того
Специальный XML-инструмент, такой как xmlstarlet
, обычно рекомендуется при работе с XML, но в этом случае подходит решение sed
.
Если этот код будет запущен в производство, я настоятельно рекомендую использовать
xsltproc
.