Как показать только первый матч в pcregrep?

У меня есть xml в лог-файлах, который выглядит так:

<ServiceRs>
1
</ServiceRs>
text text text
<ServiceRs>
2
</ServiceRs>
text

Итак, мне нужно вырезать этот XML из файла журнала, и я пытаюсь сделать это с:

pcregrep -M '<ServiceRs>(\n|.)*</ServiceRs>'

Но после этого я не получил два ServiceRs XML, я получил это:

<ServiceRs>
1
</ServiceRs>
text text text
<ServiceRs>
2
</ServiceRs>

Я знаю, что могу изменить шаблон - (\n|.)* -> (\n|.){0, n), но я действительно не знаю, сколько строк будет в xml.

1 ответ

Решение

Ты можешь попробовать

pcregrep -M '<ServiceRs>(\n|.)*?</ServiceRs>'

? для ленивого матча

Это соответствует только контенту между <ServiceRs> а также </ServiceRs> и исключает остальное text text...s

Ссылка: https://regexr.com/3h1ug

Другие вопросы по тегам