How to convert line breaks in a text file between the Windows and Unix/Linux formats?
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 POSIXPOSIX Awk does support
\r
and\15
, however the-i inplace
option is not POSIXd2u 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
Related videos on Youtube
fermin
Updated on September 17, 2022Comments
-
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 about 15 yearsdos2unix made the trick, however thanks for tr utility, it could have saved so much time in the past!
-
CesarB almost 15 yearsBe 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 over 12 yearsIn 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-- over 11 yearsThe poster wanted unix to windows line endings. And you're some years late with you answer.
-
Josh over 11 yearsWho 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-- over 11 yearsRight. Maybe you add the other tr-command for converting unix to windows then.
-
ott-- over 11 yearsI tried to undo the downvote, but it said that it's locked until the article is edited.
-
Rory O'Kane over 11 yearsYou can install
dos2unix
/unix2dos
on Mac OS X using Homebrew. With Homebrew installed, the command isbrew install dos2unix
, which uses this formula. -
Alois Mahdal almost 11 years@ott-- no problem, I upvoted for you. ...wait, now I can't upvote for me! ...dang... :)
-
Techmag over 8 yearsAfter 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 pervi
session