Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 26 Jun 2016 17:49:39 +0200
From:      Polytropon <freebsd@edvax.de>
To:        =?UTF-8?B?RGFuacOrbA==?= de Kok <me@danieldk.eu>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: grep and anchoring
Message-ID:  <20160626174939.e3cd3a45.freebsd@edvax.de>
In-Reply-To: <362EE01F-4B49-4ADB-A3A6-43F852FFF87F@danieldk.eu>
References:  <20232C89-B821-41EC-9188-C2A19C679BD8@danieldk.eu> <20160626163411.d05f863e.freebsd@edvax.de> <362EE01F-4B49-4ADB-A3A6-43F852FFF87F@danieldk.eu>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 26 Jun 2016 16:44:44 +0200, Daniël de Kok wrote:
> On 26 Jun 2016, at 16:34, Polytropon <freebsd@edvax.de> wrote:
> > Or is this just an "enrichment" your MUA added? :-)
> 
> Yes, Mac’s Mail.app likes to replace these. I didn’t use an ellipsis
> in the actual expression ;), just four dots.

And it also seems to turn the apostrophe ' into a single
closing quote ’. :-)



> > 	% echo "1234 1234 1234" | egrep -o '^....'
> > 	1234
> > 	 123
> > 	4 12
> [...]
> > First 4-character pattern is "1234", next is " 123",
> > and last is "4 12" (each 4 characters wide, as the
> > space character " " is also "any character" that matches
> > the . pattern). In the second example, the groups match
> > 4 characters each ("1234" x 3).
> 
> Note the anchoring (^), the pattern should only match any four
> characters at the beginning of the line, so the expected output
> is ‘1234’ and nothing more. ‘ 123' and '4 12' are not at the
> beginning of the line and should consequently not be printed
> to stdout.

You're right; according to "man grep":

       -o, --only-matching
              Show only the part of a matching line that matches PATTERN.

the first pattern matching "^...." should be the first 4 digits,
the output should then stop, which really looks like a bug. Instead
the pattern matching is repeated over the rest of the input line
(leading to two "additional results").



> For comparison, the output of a recent GNU grep:
> 
> —
> %  echo "1234 1234 1234" | grep -o '^....'
> 1234
> —

That is what _should_ happen, correct. Thanks for clarifying.



-- 
Polytropon
Magdeburg, Germany
Happy FreeBSD user since 4.0
Andra moi ennepe, Mousa, ...



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20160626174939.e3cd3a45.freebsd>