如何grep所有非ASCII字符?

如何grep所有非ASCII字符?

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

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

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

我的语法有错吗?或者我做错了什么?我也尝试过:

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

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


慕妹3242003
浏览 1114回答 3
3回答

绝地无双

您可以使用以下命令:grep --color='auto' -P -n "[\x80-\xFF]" file.xml这将为您提供行号,并以红色突出显示非ascii字符。在某些系统中,根据您的设置,上述操作无效,因此您可以通过反向操作grep --color='auto' -P -n "[^\x00-\x7F]" file.xml另请注意,重要的位是-P等于的标志--perl-regexp:因此它将您的模式解释为Perl正则表达式。它也说这是高度实验性的,grep -P可能会警告未实现的功能。

繁花如伊

正如大多数上述解决方案所做的那样,不是对非ASCII字符的字节范围做出假设,而是明确更好地了解ASCII字符的实际字节范围。所以第一个解决方案将成为:grep --color='auto' -P -n '[^\x00-\x7F]' file.xml(基本上对于十六进制ASCII范围之外的任何字符进行greps:从\ x00到\ x7F)在Mountain Lion上无法工作(由于缺少BSD grep中的PCRE支持),但是pcre通过Homebrew安装,以下内容也可以正常工作:pcregrep --color='auto' -n '[^\x00-\x7F]' file.xml任何人可以想到的任何利弊?
打开App,查看更多内容
随时随地看视频慕课网APP