识别并删除文本文件中的特定隐藏字符

时间:2014-09-11 03:31:04

标签: bash unix sed

我有一个包含多个隐藏字符的文本文件。使用cat -v我可以看到它们包含以下内容;

  

^ M

     

^ [[甲

行尾还有\n个字符。我希望能够以某种方式显示这些。

然后我希望能够有选择地cutsed这些隐藏的角色。我怎么能完成这个?

我已经尝试了dos2unix,但这并没有帮助删除任何^M个字符。我也试过sed s/^M//g,其中我按了 ctrl + v m


原始数据

原始数据的cat -v输出, 也可在以下网址找到:http://pastebin.com/Vk2i81JC

^MCopying non-tried blocks... Pass 1 (forwards)^M^[[A^[[A^[[Arescued:         0 B,  errsize:       0 B,  current rate:        0 B/s
   ipos:         0 B,   errors:       0,    average rate:        0 B/s
   opos:         0 B, run time:       1 s,  successful read:       1 s ago
^MFinished

想要输出

另请参阅:http://pastebin.com/wfDnrELm

rescued:         0 B,  errsize:       0 B,  current rate:        0 B/s
   ipos:         0 B,   errors:       0,    average rate:        0 B/s
   opos:         0 B, run time:       1 s,  successful read:       1 s ago
Finished

1 个答案:

答案 0 :(得分:4)

尝试下面用于翻译或删除字符的tr命令。以下命令将删除引号

中八进制中指定的字符以外的所有字符

八进制\ 12 - 新行(\ n),八进制\ 11 - TAB(^ I),八进制\ 40- \ 176 - 是好字符。

有关八进制值的完整参考,请参阅此页面: https://courses.engr.illinois.edu/ece390/books/labmanual/ascii-code-table.html

tr -cd '\11\12\40-\176' < org.txt > new.txt

文件new.txt将包含已删除的字符。

要删除^ M之间的字符并删除不必要的控制字符,请使用以下命令

sed "s/\r.*\r//g" org.txt | tr -cd '\11\12\40-\176' > new.txt