22

Is there a Bash command to convert \r\n to \n?

When I upload my scripts from Windows to Linux, I need a utility like this to make things work.

user25321
  • 361
  • 2
  • 3
  • 4

9 Answers9

31

There is:

dos2unix
RaYell
  • 1,134
  • 1
  • 12
  • 17
  • 1
    This is the historically correct answer, though dos2unix is not always available these days. – Jared Jul 01 '14 at 18:07
6

There is a Unix utility called conv that can convert line endings. It is often invoked with softlinks to u2d or d2u or unix2dos or dos2unix.

Additionally there are utilities called fromdos and todos.

Zombo
  • 1
  • 24
  • 120
  • 163
6

Translate (tr) is available in all Unixes:

tr -d '\r'  # From \r\n line end (DOS/Windows), the \r will be removed so \n line end (Unix) remains.
Peter Mortensen
  • 12,090
  • 23
  • 70
  • 90
5

With sed and find that end with .txt, .php, .js, .css:

 sed -rie 's/\r\n/\n/' \
 $(find . -type f -iregex ".*\.\(txt\|php\|js\|css\)")
fitorec
  • 59
  • 1
  • 1
4

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
Zombo
  • 1
  • 24
  • 120
  • 163
2

Using man 1 ed (which edits files in-place without any previous backup - unlike: sed .. -i ".bak" ...):

ed -s file <<< $'H\ng/\r*$/s///\nwq'
  • I diden't even know ed,but it does the job (old but gold) – dwana Sep 09 '15 at 14:01
  • This command worked for me when commands from other answers did not exist on the shared hosting I am using. Thanks :) – FK- Aug 18 '19 at 10:45
0

Yes, use dos2unix. For example:

[justin@mybox ~]$ dos2unix myfile
Justin Ethier
  • 1,521
  • 2
  • 15
  • 14
0

$ recode dos.. FILE
$ flip -u FILE

(Each also exists for non-Ubuntu systems, but these links are handy.)

0

cat input.csv | sed 's/\r/\n/g' > output.csv

Fahim
  • 101
  • 1