如何使用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
答案 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'