为了账号安全,请及时绑定邮箱和手机立即绑定

如何grep所有非ASCII字符?

如何grep所有非ASCII字符?

如何grep所有非ASCII字符?我有几个非常大的XML文件,我试图找到包含非ASCII字符的行。我尝试过以下方法:grep -e "[\x{00FF}-\x{FFFF}]" file.xml但是这会返回文件中的每一行,无论该行是否包含指定范围内的字符。我的语法有错吗?或者我做错了什么?我也尝试过:egrep "[\x{00FF}-\x{FFFF}]" file.xml(模式周围有单引号和双引号)。
查看完整描述

3 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

您可以使用以下命令:

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可能会警告未实现的功能。


查看完整回答
反对 回复 2019-08-29
?
繁花如伊

TA贡献2012条经验 获得超12个赞

正如大多数上述解决方案所做的那样,不是对非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

任何人可以想到的任何利弊?


查看完整回答
反对 回复 2019-08-29
  • 3 回答
  • 0 关注
  • 1109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信