Grep and matching end of line (anchoring)

Reini Urban rurban@x-ray.at
Fri Nov 19 12:41:00 GMT 2004


Dalton, Barnaby schrieb:
> I'm having trouble gettting grep to match end of line when used with
> files/utlilities that use DOS linefeeds. For example:
> 
> cat files.txt | grep '\.h$'
> 
> produces no output. However, if I stick a filter in the middle to change the
> line endings:
> 
> cat files.txt | perl -pe 's/\r\n/\n/' | grep '\.h$'
> I get:
> 
> file1.h
> file2.h
> 
> as expected.

pipes are treated as binmode, so they don't convert eol from \r\n to \n. 
without pipe it should work on a textmount:

     grep '\.h$' files.txt
or  grep '\.h$' < files.txt

> Should grep's $ match \r\n or should I expect to have to convert line
> endings?

grep's "$" is not expected to do textmode magic if stdin is binmode.

BTW:
   cat files.txt | sed 's,\r\n,\n,' | grep '\.h$'
is simplier.

Someone might think of a new textmode pipe operator (like a new "t|"), 
but I don't consider that a good idea.
man bash /REDIRECTION and /Pipelines
-- 
Reini Urban
http://xarch.tu-graz.ac.at/home/rurban/

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list