Sed печатает несколько строк вместо соответствующей группы - PullRequest
1 голос
/ 12 марта 2020

У меня есть файл xml, например:

<configuration>
  <property>
    <name>prop_name</name>
    <value>prop_value</value>
  </property>
</configuration>

Я хочу напечатать значение свойства ("prop_value" в этом примере). Я знаю, что sed не лучшее решение для этой проблемы, но я вынужден использовать bash: ((

Я пытался использовать следующую конструкцию:

sed -n '/prop_name/{:a;N;/<\/value>/!ba {s|<value>\(.*\)</value>|\1|p}}' file

Но что У меня есть это:

<name>prop_name</name>
prop_value

Он печатает каждую строку в пространстве образца, даже если она не соответствует. Можно ли удалить первую строку из пространства шаблона sed и распечатать только соответствующую группу? Спасибо всем в аванс за помощь.

1 Ответ

1 голос
/ 12 марта 2020

Вы забыли сопоставить все данные, которые у вас есть до <value>, который вы сохранили в пространстве шаблона, с помощью команды N, добавьте .* перед <value>:

sed -n '/prop_name/{:a;N;/<\/value>/!ba {s|.*<value>\(.*\)</value>|\1|p}}'
#                                          ^^

См. онлайн sed демо :

s='<configuration>
  <property>
    <name>prop_name</name>
    <value>prop_value</value>
  </property>
</configuration>'
sed -n '/prop_name/{:a;N;/<\/value>/!ba {s|.*<value>\(.*\)</value>|\1|p}}' <<< "$s"
# => prop_value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...