How to Remove ^M Character

There are a lot of other systems out there other than Linux, so if you have a file from, let’s say a DOS system, with extra ^M (caret M) characters at the end, you can correct it using vi. The tough part is, you will not be able to see these extra characters immediately, unless you encounter something like this:

$ ./check_summary.pl --help
-bash: ./check_summary.pl: /usr/bin/perl^M: bad interpreter: No such file or directory

(Note: check_summary is a Nagios plugin that I am currently testing.)

See the ^M character at the end? It is called the DOS line break. Unfortunately, Linux is not able to recognize these line breaks so you have to delete them. With vim. Yes, with vim, or with any editor you want, but in this post, I will show how to do it in vi.

First, open up your file where there is an extra ^M characters. While in command mode, type the following:

:%s/^V^M//g

The ^V is a CONTROL+V character and ^M is a CONTROL+M. When you type this, it will look like this:

:%s/^M//g

This command searches for ^M character (the CONTROL+V escapes a control character) the replaces it with null. After doing this, save and exit.

Another way to fix this is to use the dos2unix command like so:

$ dos2unix [file]

This might work, but I have not tried yet. Have you tried using dos2unix? Did it work? Let me know in the comments section.