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, и у вас довольно недавний grep, вы можете использовать опцию grep -o, как в
grep '^ZZZ' | grep -o '<[^>]*>'
awk
версия
awk -F"<|>" '/^ZZZ/ {print "<"$2">"}' file
<\This is the text I need>