VPSWala Blog

How to Remove (^M) Characters from a File in Linux

May 29, 2025, Written by 0 comment

What’s the Deal with Those Weird (^M) Characters?

Understanding What ^M Means and Where It Comes From
^M isn’t some secret code from The Matrix. It’s just a symbol for the carriage return character. Back in the day, typewriters used it to move the cursor to the start of the line. On computers, it lives on mostly in Windows. It’s shown as \r in code.

Why You’re Seeing ^M Characters in Your Linux Files
You usually see ^M when you bring files from Windows into Linux. Windows ends each line with both a carriage return (\r) and a newline (\n). Linux just uses a newline. So when Linux tries to read a Windows file, it doesn’t hide the \r character—it shows it as ^M. Annoying, right?

The Root of the Problem: Windows vs Linux Line Endings

How Different Operating Systems Handle Line Breaks
Windows uses \r\n (carriage return + newline).
Linux uses just \n.
macOS used to use \r, but now uses \n like Linux.

Why Copying Files Between Windows and Linux Gets Messy
When you move scripts or text files from Windows to Linux, those extra \r characters (aka ^M) sneak in. And they can break things, especially in shell scripts.

How to Spot ^M Characters in Your Files

Using cat -v to Reveal Hidden Characters
Try: cat -v filename
This command shows hidden characters. If you see ^M at the end of lines, congrats—you’ve got Windows line endings.

Checking Files with less or vim
Open the file in less or vim. You might see weird control characters like ^M at the end of every line. Those are the ones we want gone.

Is It Safe to Remove ^M Characters?

What Happens When You Remove Them
The file becomes clean. Shell scripts will run. Text will look normal. Programs won’t freak out.

When You Might Want to Keep Them (Yes, Sometimes That’s a Thing)
If the file is being sent back to Windows or opened in an old-school app that expects Windows endings, you might wanna keep them. But usually? Kill ’em.

Quick Fixes for ^M Using the dos2unix Command

What Is dos2unix and Why It’s Your Best Friend
dos2unix is a simple command-line tool. It quickly changes Windows line endings to Unix-style.

How to Install dos2unix on Different Linux Distros
Ubuntu/Debian: sudo apt install dos2unix
CentOS/RHEL: sudo yum install dos2unix
Arch: sudo pacman -S dos2unix

Using dos2unix on a Single File
Just run: dos2unix filename
Done. Simple as that.

Batch Converting Multiple Files with dos2unix
Use a wildcard: dos2unix *.txt
Or loop: for file in *.sh; do dos2unix "$file"; done

Removing ^M Characters with sed Like a Pro

The Exact sed Command You Need
Run this: sed -i 's/\r//' filename

Breaking Down How the Command Works
sed = stream editor.
s/\r// = find carriage return, replace with nothing.
-i = edit the file in place.

Common Mistakes to Avoid When Using sed
Don’t forget the -i if you want to save changes. And make sure your \r is in single quotes so your shell doesn’t get confused.

Using tr to Clean Up Those Pesky Characters

What the tr Command Does
tr stands for “translate.” It swaps or deletes characters.

Simple Example of Removing ^M with tr
Run this: tr -d '\r' < input.txt > output.txt
It removes \r and saves the cleaned text into a new file.

Using vim to Manually Remove ^M Characters

Opening a File in vim and Spotting ^M
Open with: vim filename
You’ll see ^M at the end of each line if they’re there.

The Secret vim Command to Remove Them All
Type this inside vim: :%s/^M//g (Press Ctrl+V, then Ctrl+M to type ^M)

Saving and Exiting Without Breaking Your File
After the replace, type: :wq to save and quit.

Going the Perl Route: A Powerful One-Liner Fix

Why Perl Is Still Useful for Text Processing
Perl might be old-school, but it’s great for quick text changes.

The Perl Command That Removes ^M Characters
Run: perl -pi -e 's/\r//g' filename
Fast and efficient.

Can You Use awk to Fix This Too?

Crafting an awk Command for Cleaning Up Files
Yep. Try this:
awk '{ sub("\r$", ""); print }' filename > cleanfile

When awk Might Be Overkill for ^M Issues
If you’re just dealing with ^M, awk might be more than you need. But it’s handy when doing more complex stuff.

Handling ^M Characters in Shell Scripts

Why Scripts with ^M Characters Often Break
Because Linux tries to run them and goes, “Huh? What’s this weird character?”

How to Fix Broken Scripts with One Line
Use dos2unix script.sh, and boom—your script works again.

What If You’re Using Git? (^M Characters in Source Files)

Avoiding Line Ending Issues with .gitattributes
Add this to your repo:

* text=auto

Or for shell scripts:

*.sh text eol=lf

Using Git Settings to Prevent Future Problems
Run: git config --global core.autocrlf input
This stops Git from adding \r when you commit.

Working in Docker or WSL? Here’s What You Should Know

Line Endings in Docker Containers
If you copy in files from Windows, they might have ^M. Clean them before adding to Docker.

Fixing Files in Windows Subsystem for Linux (WSL)
Same problem. Use dos2unix or sed inside WSL to clean up Windows files.

How to Prevent ^M Characters from Showing Up Again

Choosing the Right Text Editor Settings
In your editor, set line endings to Unix (\n) before saving. Easy to miss.

Making VS Code, Sublime Text, or Notepad++ Play Nice
They all let you change line endings. Look in the bottom right corner (VS Code) or Preferences.

Automating the Cleanup with Bash Scripts

Creating a Reusable Script to Strip ^M from Files
Make a script:

#!/bin/bash
for f in "$@"; do
  sed -i 's/\r//' "$f"
done

Save it as remove-cr.sh, then run: ./remove-cr.sh *.txt

Tips for Running Your Script Safely
Always back up files first. Or use -i.bak to make a backup copy.

Troubleshooting: What If They Still Won’t Go Away?

Double-Check Your File Encoding
Use file filename or iconv -f utf-8 filename to check encoding.
Sometimes it’s not just line endings causing problems.

What to Do When the Fixes Don’t Work
Try a different tool. Or combine them. dos2unix + iconv is a good duo.

Tips for Working in Mixed OS Environments

Best Practices When Collaborating Across Windows and Linux
Set a team rule: Always use Unix line endings. Use .editorconfig in the project root to enforce it.

Using Cloud Tools to Normalize Line Endings
CI tools (like GitHub Actions) can run scripts to check and fix line endings on every push.

What to Do If You’re Managing a Team

Setting Team Guidelines for File Transfers
Use Git and set .gitattributes. Teach your team what ^M is and how to spot it.

Tools and Checks to Add to Your Workflow
Add linters and pre-commit hooks that check for \r characters. That’ll save headaches later.

When ^M Characters Are Actually a Symptom of a Bigger Problem

File Corruption, Encoding Issues, and Other Gotchas
If ^M keeps showing up or files behave weirdly, it could be an encoding mismatch. Look deeper.

How to Know When It’s Time to Dig Deeper
Files still breaking after cleanup? Use tools like iconvhexdump, or vim -b to inspect them.

A Final Checklist Before You Call It Fixed

Things to Test After You’ve Removed ^M Characters
Run your scripts. Open the files. Check formatting. Make sure they work like normal.

Making Sure Your Files Run Smoothly Going Forward
Set your editor to use Unix line endings. Make cleanup part of your workflow.

Useful Tools and Commands Recap

Quick Reference Table for All Commands Mentioned

  • dos2unix: Best for quick fixes
  • sed -i 's/\r//' file: Clean with sed
  • tr -d '\r' < in > out: Translate away the problem
  • vim + :%s/^M//g: Manual cleanup
  • perl -pi -e 's/\r//g' file: One-liner power
  • awk '{ sub("\r$", ""); print }' file > new: More advanced fix

When to Use Each Command (and Why)
Use dos2unix for speed. Use sed or perl when scripting. Use vim if you’re already in there. Use awk if you need more control.

And remember: it’s just a character. You’ve got the tools to kill it.

vpswala Admin

Savita Sathe is an experienced writer and editor with over 10+ years of professional experience creating engaging content across industries. Whether it's blogs, whitepapers, website copy, emails, social media posts, or more. She develops effective hosting and tech content that helps brands connect with their audiences and achieve business goals.

Leave a reply

Your email address will not be published. Required fields are marked *