Author: Philip Hazel Date: To: Swamisai, Ragavendar CC: pcre-dev@exim.org Subject: Re: [pcre-dev] How to mimic --only-matching inside of regex
On Tue, 7 Sep 2010, Swamisai, Ragavendar wrote:
> STRING
>
> #ABC_XYZ foo.c(999) @ 19990 ns: foobar [foo] DATA packet mismatch..... Data on wire is 0000000000000000000000000000063b0000000000000000000000000000063b0000000000000000000000000000063b0000000000000000000000000000063b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>
> I want to print out just the line
>
> #ABC_XYZ foo.c(999) @ 19990 ns: foobar [foo] DATA packet mismatch.....
>
> I am able to do this if I do the below
>
> % pcregrep -o -e "#\s+ABC_XYZ.*\.\.\.\." file.txt
> #ABC_XYZ foo.c(999) @ 19990 ns: foobar [foo] DATA packet mismatch.....
>
> But need a way to do the above without using '-o' option
Well, you can't do that by anything you try inside the regex, because
pcregrep either prints the whole line or the part that matched if you
set the -o option. If you can't use the -o option, you will always get
the whole line.
How about piping STDOUT to another instance of pcregrep (or some other
program) to chop off the text after the .... ? Or do that before
passing the data to pcregrep?