Извлекать текст между двумя строками, но только первое вхождение с использованием sed?

#shell #sed #sh

#оболочка #sed #sh

Вопрос:

Итак, у меня есть строка, которая выглядит примерно так :

 <tag>Hello world </tag> blah blah blah <tag> Good night !! </tag>
  

Мне нужно только извлечь hello world. Есть идеи, как создать команду sed?

Ответ №1:

используя простое вырезание :

 echo "<tag>Hello world </tag> blah blah blah <tag> Good night ls -ltrh cptrade* </tag>" | cut -d'>' -f2 | cut -d'<' -f1
  

Ответ №2:

Грубо, но эффективно:

 sed 's|</tag>.*||;s|.*<tag>||'
  

«Удалите все, начиная с первого </tag> и далее, затем удалите все вплоть до последнего (и, предположительно, единственного оставшегося) <tag> включительно».