At Friday, November 19, 2004 7:41 AM, Reini Urban wrote: > Dalton, Barnaby schrieb: >> I'm having trouble getting grep to match end of line when used with >> files/utilities 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 simpler. > > 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/ Assuming that \r never occurs in the middle of a line: cat files.txt | tr -d '\r' | grep '\.h$'
This should work whether or not one is on a text mount or for the file has DOS or Unix line endings: cat files.txt | grep -E '\.h^M?$' -- 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/