Thursday, May 7, 2009

Remove Control M (^M) Characters From Unix File

Hi Friends,

While working on Unix, we generally transfer files from Windows to different Unix platforms. After the file is copied if we open the text file in our most liked Vi Editor, then we see ^M (Control M) character at the end of each line.

UNIX treats the end of line differently than other operating systems. Sometimes when editing files in both Windows and UNIX environments, a CTRL-M character is visibly displayed at the end of each line as ^M in vi.

Two simple ways of removing Control M (^M) Character files are as follows:

1) Using dos2unix utility

Many Unix flavors ship dos2unix utility.

dos2unix filename [newfilename]

e.g. remove control characters from file xyz.txt

dos2unix xyz.txt xyz.txt #this will replace abc.txt and remove control characters

dos2unix xyz.txt abc.txt #a new file xyz.txt will be created after removing control characters

2) Using Vi Editor

To remove the ^M characters at the end of all lines in vi, use:

:%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

In UNIX, you can escape a control character by preceeding it with a CONTROL-V. The :%s is a basic search and replace command in vi. It tells vi to replace the regular expression between the first and second slashes (^M) with the text between the second and third slashes (nothing in this case). The g at the end directs vi to search and replace globally (all occurrences).

Hope this helps..

No comments:

Post a Comment