Reputation: 169
How do I remove ^H and ^M characters from a file using Linux shell scripting?
^[[0^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H rcv-packets: 0
^[[0^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H rcv-errs: 0
rcv-drop: 0
rcv-fifo: 0
rcv-frame: 0
Upvotes: 16
Views: 31590
Reputation: 1024
I used dos2unix and it worked for me.
If you are using a Debian-based distro, you should be able to do sudo apt-get install dos2unix
.
If you are using a RH-like distro, you should be able to do sudo yum install dos2unix
.
Once it is installed, you can just give the target file as an argument
dos2unix file.sh
Upvotes: 0
Reputation: 1
if you want to change original file, do this:
sed -i '.bak' 's/^M//g ; s/^H//g' test.md
(^M is control+v
control+m
)
(^H is control+v
control+h
)
much file, you can do this:
find source -name '*.md' | xargs sed -i '.bak' 's/^M//g ; s/^H//g'
Upvotes: 0
Reputation: 166737
You can remove all control characters by using tr
, e.g.
tr -d "[:cntrl:]" file.txt
To exclude some of them (like line endings), check: Removing control characters from a file.
Upvotes: 0
Reputation: 769
Use sed
utility.
See below as per examples:
sed 's/%//' file > newfile
echo "82%%%" | sed 's/%*$//'
echo "68%" | sed "s/%$//" #assume % is always at the end.
Upvotes: 0
Reputation: 489
For removing ^M characters appearing at the end of every line, I usually do this in vi editor.
:%s/.$//g
It just removes the last character of every line irrespective of what the character is. This solved my provlem.
Upvotes: 2
Reputation: 2935
What you're seeing there are control characters, you simply could delete them with tr
cat your_file |
tr -d '\b\r'
this is better:
tr -d '\b\r' < your_file
Upvotes: 26
Reputation: 104080
Two methods come to mind immediately:
tr -d control+v control+h
sed 's/control+v control+h//g'
Here's both in action:
$ od -c test
0000000 \b h e l l o \b t h e r e \b \n
0000016
$ sed 's/^H//g' < test | od -c
0000000 h e l l o t h e r e \n
0000013
$ tr -d ^H < test | od -c
0000000 h e l l o t h e r e \n
0000013
Upvotes: 9