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/