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

标签 bash unix sed

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

^M

^[[A

行尾还有\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

最佳答案

试试下面的 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

关于bash - 从文本文件中识别并删除特定的隐藏字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25778587/

相关文章:

shell - "grep"是否有它可以处理的最大文件数?

regex - Unix - 删除与正则表达式匹配的部分

linux - 移动一堆文件时更改所有文件

sed - docker run sed 不起作用

linux - 如何递归打印列的内容

xml - 在 bash 脚本中提取 XML 值

bash - 如何限制日志文件中的最大行数

bash - Shell/Bash - 如何将数组保存到文件并加载另一个文件数组?

bash - 如何编写类似于 init.d 中使用的 bash 脚本?

linux - 在 bash 中匹配单词后的 grep 数字