如何只显示 pcregrep 中的第一个匹配项?

How to show only first match in 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),但我真的不知道 [= 中会有多少行21=].

你能试试吗

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

? 用于惰性匹配

只匹配<ServiceRs></ServiceRs>之间的内容,排除其余text text...

参考:https://regexr.com/3h1ug