On Sun, 25 Jun 2006, Dave wrote:

David Mastronarde wrote:
After upgrading sed from 4.1.4 to 4.1.5, I found that line endings were
being converted from CRLF to CRCRLF when the input file was specified
with a windows file path:

% sed -e 's/g5a/setname/g' < 'c:\cygwin\home\mast/sedtestin' > ! sedtestout

Converting the path to cygwin format eliminated the problem.


C:\cygwin / system textmode C:\cygwin/bin /usr/bin system textmode C:\cygwin/lib /usr/lib system textmode C:\cygwin\usr\X11R6\lib\X11\fonts /usr/X11R6/lib/X11/fonts system binmode . /cygdrive system textmode,cygdrive

Have a read of http://cygwin.com/cygwin-ug-net/using-textbinary.html

Stepping through it:
% sed -e 's/g5a/setname/g' < 'c:\cygwin\home\mast/sedtestin' > ! sedtestout

rule b. sedtestin input will be read in binary mode. i.e it reads \r\n

redirection of input is done in binmode from rule c.
ditto output redirection.

writing of the file is done in textmode due to your mounts (rule a). Hence \r\n coming out of sed becomes \r\r\n.

Try specifying the output file in MSDOS format, '.\sedtestout'.


Thanks for bringing the rules (back) to my attention. Yes, it seems that the heart of the problem is that a file specified by a windows path is read in binary while the writing is to a textmode-mounted partition. I never made the connection between the initial choice of line endings when running Cygwin setup and the mounting mode of the partitions.

I don't see the distinction between the redirection and the writing, and also setting CYGWIN to nobinmode has no effect, so rule c does not seem to be relevant.

But also, specifying output as '.\sedtestout' did NOT solve the problem, even with nobinmode in effect. So rule b is governing the input but is not being applied on output.

David

--
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/

Reply via email to