[Bug 209116] bsdgrep -Fxf failing if earlier non-match is a sub-prefix of the actual match

anonymous johnandsara2 at cox.net
Fri Apr 29 01:46:21 UTC 2016


bugzilla-noreply at freebsd.org wrote:
> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=209116
> 
>             Bug ID: 209116
>            Summary: bsdgrep -Fxf failing if earlier non-match is a
>                     sub-prefix of the actual match
>            Product: Base System
>            Version: 9.1-RELEASE
>           Hardware: Any
>                 OS: Any
>             Status: New
>           Severity: Affects Only Me
>           Priority: ---
>          Component: bin
>           Assignee: freebsd-bugs at FreeBSD.org
>           Reporter: shane at itlab.co.nz
> 
> I have a script that generates a list of pending build targets and a list of
> targets this machine can build, and generates the intersection list using grep
> -Fxf. On our Mac it was behaving strangely and I've tracked and reduced it to
> the following snippets.
> 
> Although found on OSX, I've reproduced this bug using the bsdgrep command in
> FreeBSD 9.0-RELEASE (bsdgrep -V -> "bsdgrep (BSD grep) 2.5.1-FreeBSD"). The
> grep on OSX is bsdgrep, while on my BSD it is GNU grep.
> 
> 
> # -F=fixed strings, -x=match whole lines, -f=read patterns from file
> printf "linux\nbsd\nmacosx64\n" | bsdgrep -Fxf <(printf "macosx\nmacosx64\n")
> gives no result, but the following work fine.
> 
> # swap pattern order
> printf "linux\nbsd\nmacosx64\n" | bsdgrep -Fxf <(printf "macosx64\nmacosx\n")
> # search for prefix substring
> printf "linux\nbsd\nmacosx\n" | bsdgrep -Fxf <(printf "macosx\nmacosx64\n")
> # in either pattern order
> printf "linux\nbsd\nmacosx\n" | bsdgrep -Fxf <(printf "macosx64\nmacosx\n")
> 
> It seems to fail to match a line that contains an earlier pattern match as a
> prefix.
> 
> I will simply avoid this problem by using comm instead, but I'll hang around
> for a while to answer any questions that come up.
> 

input file is stdin by pipe: "linux\nbsd\nmacosx\n"

-F  fixed strings "match any of list of strings" ?
     (seems like one should use regex \| for that but ok)

-x  "select input lines wholey matching pattern"
     (you have \n in your pattern, i am unsure if that
      is supposed to be implied and left out or not)

-f FILE
     but you gave no file, instead redirected a second
     stdin - and it is unclear if grep will read both
     and close both redirections - also unclear if your
     shell (tcsh or sh or bash) would also have a standard
     for that)

i think your example is unclear and omitting the arg for -f
tells me you may not have spent enough time reading man pages

am i right?


More information about the freebsd-bugs mailing list