如何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可能会警告未实现的功能。
繁花如伊
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
任何人可以想到的任何利弊?
添加回答
举报
0/150
提交
取消