本文介绍了如何使用emacs查找和删除文本文件中的不可见字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个名为COPYING的txt文件,它在Windows上编辑。它包含窗口样式eol

  $ file COPYING 
COPYING:ASCII英文文本,带有CRLF行终止符

我尝试使用dos2unix将其转换为unix样式。以下是输出

  $ dos2unix COPYING 
dos2unix:跳过二进制文件COPYING

我很惊讶,发现dos2unix程序将其报告为二进制文件。然后使用其他编辑器(而不是emacs),我发现该文件包含一个控制字符。我有兴趣使用emacs查找文件中的所有隐形字符。



通过Googling,我发现以下解决方案使用了tr

  tr -cd'\11\12\40-\176'< file_name 

如何在emacs中执行相同的操作。我尝试了hexl模式。 hexl模式在单个缓冲区中显示文本及其对应的ascii值,这是非常好的。如何查找ASCII数值不同于11-12,40-176(即标签,空格和可见字符)的字符。我试图为该搜索创建一个正则表达式,但这是相当复杂的。

解决方案

默认情况下,Emacs不会隐藏任何字符。按 + + 或然后 + 如果前者对你的手指太硬,或者如果你愿意,或者code> Mx replace-regexp RET 。然后,对于正则表达式,输入

  [^ @  -  ^ H ^ K  -  ^ _ ^?] 

但是,在我写的 ^ H 中,键入 + 然后是 + ,以字面的方式输入control-H您可以按 + 然后 + 为 ^ @ ,通常 + 然后为 ^?。将这个正则表达式的所有出现替换为空字符串。



由于您在Emacs中打开文件,因此您可以在此处更改其行尾。按 Cx RET f ( + ++, or then + if the former is too hard on your fingers, or M-x replace-regexp RET if you prefer. Then, for the regular expression, enter

[^@-^H^K-^_^?]

However, where I wrote ^H, type + then +, to enter a "control-H" character literally, and similarly for the others. You can press + then + for ^@, and usually + then for ^?. Replace all occurrences of this regular expression by the empty string.

Since you have the file open in Emacs, you can change its line endings while you're at it. Press C-x RET f (+ ) and enter us-ascii-unix as the new desired encoding for the file.

这篇关于如何使用emacs查找和删除文本文件中的不可见字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-01 16:09