Найти подстроку из тега XML с помощью сценария оболочки - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть XML файл в формате:

<classes>

 <subject lb="Fall Sem 2020">
  <name>Operating System</name>
  <credit>3</credit>
  <type>Theory</type>
  <faculty>Prof. XYZ</faculty> 
 </subject>

 <subject lb="Spring Sem 2020">
  <name>Web Development</name>
  <credit>3</credit>
  <type>Lab</type>
 </subject>

 <subject lb="Fall Sem 2021">
  <name>Computer Network</name>
  <credit>3</credit>
  <type>Theory</type>
  <faculty>Prof. ABC</faculty> 
 </subject>

 <subject lb="Spring Sem 2021">
  <name>Software Engineering</name>
  <credit>3</credit>
  <type>Lab</type>
 </subject>

</classes>

Ожидаемый вывод:

Fall Sem 2020
Spring Sem 2020
Fall Sem 2021
Spring Sem 2021

Я хочу извлечь значения lb в массив.

Моя попытка: я пытался использовать sed -n "/lb="/,\/"/p" file.xml, но эта команда не дает мне значений, присутствующих для конкретной метки.

Что может быть правильным способом решения этой проблемы?

Ответы [ 2 ]

2 голосов
/ 15 апреля 2020

Не могли бы вы попробовать следовать в awk, учитывая, что у вас нет никакого способа использовать xml инструменты.

awk '
BEGIN{
  OFS=","
}
/<subject lb="/{
  match($0,/".*"/)
  print substr($0,RSTART+1,RLENGTH-2)
}
' Input_file
2 голосов
/ 15 апреля 2020

Получение значения атрибута в элементе xml.

Если парсер XML недоступен. С GNU sed:

sed -En 's/.* lb="([^"]+)".*/\1/p' file

Вывод:

Fall Sem 2020
Spring Sem 2020
Fall Sem 2021
Spring Sem 2021
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...