Re: grep caret problem

"Kees Zeelenberg" <[email protected]>
Newsgroups gmane.comp.windows.gnu.user
Message-ID <08bf01c87fc0$f0070760$4701a8c0@gamma>
> I have a file (example.txt) that contains the following six lines:
> something else
> /Type /Pages
> /Type /Page
> /Type /Page >>
> /Type /Page/Foo
> something else
>
> When I run the following in a cmd shell on XP using GnuWin's port of grep 
> 2.51, I expect the result 3 but
> instead get 0:
>  grep  --count "/Type /Page[^s]" example.txt
> 0

The result I get, with grep-2.5.1a under XP, is: 2, both directly in a cmd 
shell and through a bat file. This, and not 3, is also the correct answer, 
because the regular expression "/Type /Page[^s]" requires at least one more 
character after "Page", and in the line "/Type /Page", there is no 
additional character.

> When I run the same command in cygwin with cygwin's port of grep 2.51, I 
> do get the expected result.

You get this result because there is indeed an additional character, 0xD, 
before the line ending (0xA). Remenber: under Cygwin, the default is binary 
files, whereas under MS-Windows, 0xD0xA is the line ending. If you remove 
the 0xD's from example.txt, then you get the same result as above: 2.

What you want can be achieved by:

    grep --count -E "/Type /Page([^s]|$)" example.txt

which gives the result: 3

Kees Zeelenberg 


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.