[Toybox] grep corner cases

Rob Landley rob at landley.net
Mon Aug 19 16:52:04 PDT 2013


On 08/19/2013 02:26:55 PM, Felix Janda wrote:
> Hi,
> 
> I saw the comment in changeset 1017 on possible bugs in GNU grep.
> 
> The failing tests are for me:
> 
> testing "grep -vo" "grep -vo one input" "two\nthree\n"  
> "onetwoonethreeone\n" ""
> testing "grep -Fx ''" "grep -Fx '' input" "one one one\n" "one one  
> one\n" ""
> testing "grep -F -e blah -e ''" "grep -F -e blah -e '' input" "one  
> one one\n" \
>   "one one one\n" ""
> 
> -o is a GNU extension making grep only output the matched parts of  
> each
> matched line. So since -v inverts the set of all matched lines grep  
> -vo
> should not output anything.

Does it invert the set of matched _lines_, or does it invert the match  
criteria? I made it so that:

   echo oneandtwoandthree | grep -ov

would produce:
   one
   two
   three

(I pondered onetwothree but that's not how -o without -v works...)

The reason there are deviating test cases to consider is I'm not taking  
"what gcc does" as an inherent definition of "the right thing to do".

> -F turns on fixed string matching so '' is no longer the empty regex
> which matches everything, but the empty string.

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html

-F  Match using fixed strings. Treat each pattern specified as a string
     instead of a regular expression. If an input line contains any of  
the
     patterns as a contiguous sequence of bytes, the line shall be  
matched.
     A null string shall match every line.

That implies that

   echo one | grep -F -e walrus -e ''

Should match one, but with the gnu/dammit version it only does so  
_without_ the -F. Or with -F and just one argument...

> Combined with -x IMO
> it should only match empty lines.

I asked the Austin guys how -F and -x interact. It's not obvious to me  
from reading it.

Rob


More information about the Toybox mailing list