【发布时间】:2012-11-28 01:56:07
【问题描述】:
我有一个大文本文件,其中包含一些导致 LaTeX 崩溃的 unicode 字符。如何在 Linux bash 中使用 sed 等在文件中查找非 ASCII 字符?
【问题讨论】:
-
它是 UTF-8 格式的文件吗,大多数字符是 ASCII,但有些是格式良好的多字节 UTF-8,有些是损坏的(多字节)UTF-8?是否有许多格式正确(多字节)的 UTF-8 字符?还是完全是其他编码?
我有一个大文本文件,其中包含一些导致 LaTeX 崩溃的 unicode 字符。如何在 Linux bash 中使用 sed 等在文件中查找非 ASCII 字符?
【问题讨论】:
试试:
nonascii() { LANG=C grep --color=always '[^ -~]\+'; }
可以这样使用:
printf 'ŨTF8\n' | nonascii
在[]^ 内表示“不”。所以[^ -~] 表示不在空格和~之间的字符。因此,不包括控制字符,它匹配非 ASCII 字符,并且是更便携但精度稍差的[^\x00-\x7f] 版本。 \+ 表示 1 or more 并将让多字节字符在完整字符周围显示颜色,而不是散布在每个字节中,从而破坏多字节序列
【讨论】:
[^\x00-\x7f] 方法对我也不起作用。
试试这个命令:
grep -P '[^\x00-\x7f]' file
【讨论】:
-P(--perl-regex) 选项。
-P 选项在 BSD grep 中不起作用,这是 OSX 中提供的一种
grep '[^\x00-\x7f]' file