使用Linux shell脚本从文件中删除^ H和^ M个字符

时间:2011-06-29 11:37:12

标签: linux shell

如何使用Linux shell脚本从文件中删除^ H和^ M个字符?

^[[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

6 个答案:

答案 0 :(得分:22)

您看到的是控制字符,您可以使用tr

删除它们
cat your_file |
tr -d '\b\r'

这样更好:

tr -d '\b\r' < your_file

答案 1 :(得分:6)

立刻想到两种方法:

  • tr -d control+v control+h
  • sed 's/control+v control+h//g'

这两个都在行动中:

$ 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

答案 2 :(得分:2)

为了删除出现在每一行末尾的^ M个字符,我通常在vi编辑器中执行此操作。

:%s/.$//g

它只删除每一行的最后一个字符,而不管字符是什么。 这解决了我的问题。

答案 3 :(得分:0)

使用sed实用程序。 请参阅以下examples

sed 's/%//' file > newfile
echo "82%%%" | sed 's/%*$//'
echo "68%" | sed "s/%$//" #assume % is always at the end.

答案 4 :(得分:0)

您可以使用tr删除所有控制字符,例如

tr -d "[:cntrl:]" file.txt

要排除部分内容(如行结尾),请检查:Removing control characters from a file

答案 5 :(得分:0)

如果要更改原始文件,请执行以下操作:

sed -i '.bak' 's/^M//g ; s/^H//g' test.md

(^ M是control+v control+m
(^ H是control+v control+h

很多文件,您可以执行以下操作:

find source -name '*.md' | xargs sed -i '.bak' 's/^M//g ; s/^H//g'