Sed найти шаблон на линии с другим шаблоном

Я пытаюсь извлечь текст из файла между < и >, но только в строке, начинающейся с другого конкретного шаблона.

Так в файле, который выглядит так:

XXX Something here  
XXX Something more here  
XXX <\Lines like this are a problem> 
ZZZ something <\This is the text I need> 
XXX Don't need any of this

Я хотел бы напечатать только <\This is the text I need>,

Если я сделаю

sed -n '/^ZZZ/p' FILENAME

он вытягивает правильные линии, на которые я должен смотреть, но, очевидно, печатает всю строку.

sed -n '/<\/,/>/p' FILENAME prints way too much. 

Я изучил группировку и попытался

sed -n '/^ZZZ/{/<\/,/>/} FILENAME

но это, похоже, не работает вообще.

Какие-либо предложения? Они будут высоко оценены.

(Извиняюсь за форматирование, здесь никогда раньше не публиковался)

3 ответа

Решение
sed -n '/^ZZZ/ { s/^.*\(<.*>\).*$/\1/p }'

Если это не обязательно должно быть sed, и у вас довольно недавний grep, вы можете использовать опцию grep -o, как в

grep '^ZZZ' | grep -o '<[^>]*>'

awk версия

awk -F"<|>" '/^ZZZ/ {print "<"$2">"}' file
<\This is the text I need>
Другие вопросы по тегам