regex - 如何 grep 查找所有非 ASCII 字符?

标签 regex unix unicode grep

我有几个非常大的 XML 文件,我正在尝试查找包含非 ASCII 字符的行。我尝试过以下方法:

grep -e "[\x{00FF}-\x{FFFF}]" file.xml

但这会返回文件中的每一行,无论该行是否包含指定范围内的字符。

我的语法是否错误或者我做错了什么?我也尝试过:

egrep "[\x{00FF}-\x{FFFF}]" file.xml 

(模式周围有单引号和双引号)。

最佳答案

您可以使用命令:

grep --color='auto' -P -n "[\x80-\xFF]" file.xml

这将为您提供行号,并以红色突出显示非 ASCII 字符。

在某些系统中,根据您的设置,上述方法将不起作用,因此您可以通过逆向 grep

grep --color='auto' -P -n "[^\x00-\x7F]" file.xml

另请注意,重要的一点是 -P 标志,它相当于 --perl-regexp:因此它将把您的模式解释为 Perl 正则表达式。它还说

this is highly experimental and grep -P may warn of unimplemented features.

关于regex - 如何 grep 查找所有非 ASCII 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3001177/

相关文章:

javascript - 在字母数字字符之间以分号分隔

javascript - 构建一个用于密码检查的正则表达式

java - 如何在 Unix 上检查文件是否存在并可从 Java 执行?

linux - 使用文字双引号从 bash 脚本生成文本

Qt - 将 QString 转换为 Unicode QByteArray

php - 正则表达式在php中分隔单词数字和符号

java - @ 正则表达式(at 符号)

c - 如何用反引号修复 initscr 错误?

javascript - 正好两个或三个单词的正则表达式

python - python加载json时,如何将str转成unicode,才能打印汉字?