How do I convert DOS newlines CR/LF to Unix/Linux format?
To converts text files between DOS and Unix formats you need to use special utility called dos2unix. DOS text files traditionally have carriage return and line feed pairs as their newline characters while Unix text files have the line feed as their newline character.
UNIX/Linux Commands
You can use the following tools:
- dos2unix (also known as fromdos) - converts text files from the DOS format to the Unix
format - unix2dos (also known as todos) - converts text files from the Unix format to the DOS format.
- sed - You can use sed command for same purpose
- tr command
- Perl one liner
Task: Convert DOS file to UNIX format
Type the following command to convert file called myfile.txt:
$ dos2unix myfile.txt
However above command will not make a backup of original file myfile.txt. To make a backup of original file. The original file is renamed with the original filename and a .bak extension. Type the following command:
$ dos2unix -b myfile.txt
Task: Convert UNIX file to DOS format
Type the following command to convert file called myfile.txt:
$ unix2dos myfile.txt
$ unix2dos -b myfile.txt
Task: Convert Dos TO Unix Using tr Command
Type the following command:
tr -d '\r' < input.file > output.file
Task: Convert Dos TO Unix Using Perl One Liner
Type the following command:
perl -pi -e 's/\r\n/\n/g' input.fileTask: Convert UNIX to DOS format using sed command
Type the following command if you are using bash shell:
$ sed 's/$'"/`echo \\\r`/" input.txt > output.txt
Note: sed version may not work under different UNIX/Linux variant,refer your local sed man page for more info.
Task: Convert DOS newlines (CR/LF) to Unix format using sed command
If you are using BASH shell type the following command (press Ctrl-V then Ctrl-M to get pattern or special symbol)
$ sed 's/^M$//' input.txt > output.txt
Note: sed version may not work under different UNIX/Linux variant, refer your local sed man page for more info.
You should follow me on twitter here or grab rss feed to keep track of new changes.
Featured Articles:
- 30 Handy Bash Shell Aliases For Linux / Unix / Mac OS X
- Top 30 Nmap Command Examples For Sys/Network Admins
- 25 PHP Security Best Practices For Sys Admins
- 20 Linux System Monitoring Tools Every SysAdmin Should Know
- 20 Linux Server Hardening Security Tips
- Linux: 20 Iptables Examples For New SysAdmins
- Top 20 OpenSSH Server Best Security Practices
- Top 20 Nginx WebServer Best Security Practices
- 20 Examples: Make Sure Unix / Linux Configuration Files Are Free From Syntax Errors
- 15 Greatest Open Source Terminal Applications Of 2012

- My 10 UNIX Command Line Mistakes
- Top 10 Open Source Web-Based Project Management Software
- Top 5 Email Client For Linux, Mac OS X, and Windows Users
- The Novice Guide To Buying A Linux Laptop














{ 16 comments… read them below or add one }
Howto: UNIX or Linux convert DOS newlines CR-LF to Unix/Linux format
THANK YOU! to who ever wrote this. I’ve been messing around with this for quite a while. This even works on AIX’s legacy version of sed. My day has been so made by this little nugget.
I had tried the suggestion from Wikipedia and that did not work. This solution worked perfectly first time. THANK YOU.
Your UNIX to DOS sed script is incorrect if what you want is CRLF.
$ echo | sed ‘s/$’”/`echo \\\r`/” | hexdump
0000000 0a0d
ASCII 0/13 is decimal 013, hex 0d, octal 015, bits 00001101: called ^M, CR
Official name: Carriage Return
ASCII 0/10 is decimal 010, hex 0a, octal 012, bits 00001010: called ^J, LF, NL
Official name: Line Feed
For CRLF you want 0d0a. Your producing LFCR here.
Dear John,
Actually, the scripts are correct. Hexdump is reversing the byte order (integer format)
Try this for example and as a simplified script:
$ echo TEST | sed ‘s/$/\r/’ | hexdump -C
Then try it without the -C.
You will notice that the 54′s (T) are next to each other. (ETTS)
Impressive i would say.. I used dos2unix on CentOS 5.3 without any problems and a file of 300,000 got modified in less then 15 secs… compared it to using notepad++ on windows and your computer would freeze up for at least 2 mins for the same file ;).
sed ‘s/$’”/`echo \\\r`/” input.txt > output.txt
leaves one extra CR at the end of the file.
This makes the suggestion broken.
The sed … echo \\\r worked fine for us on AIX version 6.1 to convert Unix to DOS. Thanks!
I have to convert 50 files at one shot to Unix format. Is there a way to do it?
Use bash for loop:
Even easier:
$cd dir/with/stuff
$dos2unix *
Thanks!
I was just about to write a shellscript for this, but then I just googled it because I forgot if it was /n to /r or how :P It works!!!
Side note:
For people with problems about duplicates moved from Windows to Linux on Garry’s Mod servers they should use “dos2unix STEAM*/*.txt” to avoid trying to convert directories. There’s a lot of trouble with user created directories otherwise. The program tries to convert directories – which is a bit annoying.
I found the sed unix to dos to not work, it ended up leaving CRs at the end of lines and CRLF at the start of every line….
instead the following correctly left CRLFs at the end of every line (that originally had LFs)
sed “s/$/`echo`/” on Ubuntu BASH
I want to know that can a DOS (Linux) support the Microsoft widow XP. if yes then how?
how o convert DOS CR/LF files to UNIX files in which lines end in LF?
Task: Convert Unix TO Dos Using Perl One Liner
perl -pi -e ‘s/\n/\r\n/g’ input.file
For me, `tr -d ‘\r’ output.file` deletes all the carriage returns without replacing them with newlines. `tr ‘\r’ ‘\n’ output.file` works nicely, though