Извлечение свойств XML в скрипте bash на основе другого свойства

Я очень давно не писал 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.

Любые идеи о лучшем подходе к этому?

Если этот код будет запущен в производство, я настоятельно рекомендую использовать xsltproc.

l0b0 22.12.2020 21:04
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хотя это и не лучший инструмент для работы, sed можно использовать. Пожалуйста попробуйте

sed -n '/Type = "1"/s/.*Guid = "\([^"]*\).*/\1/p' file.xml

Протестировано с GNU sed 4.8

Что было бы лучше? Мне нужно только что-то, что может надежно выполнить этот очень конкретный вариант использования, не более того

Connor Schwinghammer 22.12.2020 21:40

Специальный XML-инструмент, такой как xmlstarlet, обычно рекомендуется при работе с XML, но в этом случае подходит решение sed.

Thomas Hansen 22.12.2020 23:04

Другие вопросы по теме