简体   繁体   中英

How to show only first match in pcregrep?

I have xml in log-files, that looks like:

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

So, i need to cut this XML from log file and i'm trying to do this with:

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

But after this i didn't get two ServiceRs xml's, i got this:

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

I know, that i can modify pattern - (\\n|.)* -> (\\n|.){0, n), but i really don't know how many lines will be in xml.

Can you try

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

? is for lazy match

It only matches the content between the <ServiceRs> and </ServiceRs> and excludes the rest text text... s

Ref: https://regexr.com/3h1ug

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM