How to convert line breaks in a text file between the Windows and Unix/Linux formats?

40,466

Solution 1

You're probably looking for dos2unix, unix2dos, todos or fromdos depending on your distribution. Ubuntu/Debian package todos/fromdos as part of the tofrodos package from memory.

Solution 2

One option is to use unix2dos (and dos2unix for going back) on the command line.

Another is to use a text editor:
For vi: :set ff=dos to set the line endings to be dos line endings.
For emacs: C-x [ENTER] f dos [ENTER]

For your favourite GUI based editor (eg. jedit) I recommend checking the manual or Google.

Lastly if you don't want to deal with a text editor and just do it using more common utilities and such (or don't have unix2dos installed):

tr -d '\r' < infile > outfile to go from Windows -> Unix
awk 'sub("$", "\r")' unixfile.txt > winfile.txt to go from Unix -> Windows as tr can not go from Unix to Windows.

Solution 3

Edit it in Vim and use the set fileformat command.

  • MS-DOS/Windows (CR+LF breaks) to *nix (LF only breaks)

    :set fileformat=unix
    :wq
    
  • *nix to MS-DOS/Windows

    :set fileformat=dos
    :wq
    

Solution 4

This is what I use, similar to Chealion, to convert Windows to Unix line endings:

tr -d \\015 < windows > unix

Solution 5

Doing this with POSIX is tricky:

  • POSIX Sed does not support \r or \15. Even if it did, the in place option -i is not POSIX

  • POSIX Awk does support \r and \15, however the -i inplace option is not POSIX

  • d2u and dos2unix are not POSIX utilities, but ex is

  • POSIX ex does not support \r, \15, \n or \12

To remove carriage returns:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file

To add carriage returns:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file
Share:
40,466

Related videos on Youtube

fermin
Author by

fermin

Updated on September 17, 2022

Comments

  • fermin
    fermin over 1 year

    How do I convert line breaks in a text file between the Windows and Unix/Linux formats?

    I have a *nix environment, but that I need to import and export data with the Windows-style line breaks. I thought there would be a standard utility or command to do this, but I can't seem to find it.

  • fermin
    fermin about 15 years
    dos2unix made the trick, however thanks for tr utility, it could have saved so much time in the past!
  • CesarB
    CesarB almost 15 years
    Be careful when using that if the file does not already have a line break at the last line; vim will add one unless you know how to tell it not to.
  • womble
    womble over 12 years
    In case anyone comes across this question looking for Windows solutions, the upstream site for dos2unix is waterlan.home.xs4all.nl/dos2unix.html, and it works in Windows as well.
  • ott--
    ott-- over 11 years
    The poster wanted unix to windows line endings. And you're some years late with you answer.
  • Josh
    Josh over 11 years
    Who cares if it's "years late"? It still works, and it's still applicable to the question. I was just adding another option for readers that come upon it, like myself. Also, his question asks for Windows -> Unix, and his description asks for Unix -> Windows. shrug
  • ott--
    ott-- over 11 years
    Right. Maybe you add the other tr-command for converting unix to windows then.
  • ott--
    ott-- over 11 years
    I tried to undo the downvote, but it said that it's locked until the article is edited.
  • Rory O'Kane
    Rory O'Kane over 11 years
    You can install dos2unix/unix2dos on Mac OS X using Homebrew. With Homebrew installed, the command is brew install dos2unix, which uses this formula.
  • Alois Mahdal
    Alois Mahdal almost 11 years
    @ott-- no problem, I upvoted for you. ...wait, now I can't upvote for me! ...dang... :)
  • Techmag
    Techmag over 8 years
    After hours of trying every other solution this was the lifesaver I needed. Confirmed behaviour on OS X Yosemite with hexdump -C -- also confirmed this is not sticky -- it is set per vi session