问题描述
我有一个名为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查找和删除文本文件中的不可见字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!