Regex 在文件中查找非ASCII代码点
我目前正在使用此正则表达式查找文件中的非ASCII代码点,无论采用何种编码:Regex 在文件中查找非ASCII代码点,regex,linux,encoding,grep,Regex,Linux,Encoding,Grep,我目前正在使用此正则表达式查找文件中的非ASCII代码点,无论采用何种编码: $ cat test.txt | hd | grep -P " [8-9a-f][\da-f]" 有更好的、更简洁的或不太老套的方法吗?我通常使用grep-p“[^\x00-\x7f]”来查找具有攻击性的字符,但我在这里查找具有攻击性的代码点 请注意,当前的hacky方法确实有一个很好的副作用,即显示周围的ASCII字符,这对于上下文来说非常好。使用hd,这应该更快: hd test.txt |grep -w '[8
$ cat test.txt | hd | grep -P " [8-9a-f][\da-f]"
有更好的、更简洁的或不太老套的方法吗?我通常使用grep-p“[^\x00-\x7f]”
来查找具有攻击性的字符,但我在这里查找具有攻击性的代码点
请注意,当前的hacky方法确实有一个很好的副作用,即显示周围的ASCII字符,这对于上下文来说非常好。使用hd,这应该更快:
hd test.txt |grep -w '[89a-f][0-9a-f]'
(grep-p
调用libpcre,速度较慢。grep-w
只搜索“单词”,并默认为标准posix正则表达式,其速度几乎与-F
纯文本查询一样快。从管道中删除cat
也节省了(微不足道的)工作量。)
如果不需要上下文,可以给grep设置-o
标志。如果您希望上下文更清楚地调用,请考虑<代码>——颜色< /C> >(或者甚至<代码>——颜色=总是/<代码>,如果您正在输出某处,并且不介意着色控制字符)。您还可能会发现grep的-n
标志很有用,它将为您提供行号
我认为您可以使用grep的-a
标志在单个命令中实现所需的功能(这强制所有内容都以文本形式读取,而不是无用的“Binary file test.txt matches”输出),尽管您可能不喜欢终端的输出功能。可能将其导入文件,然后使用vim
查看该文件(与less
不同,vim不会呈现控制字符):
这可能比管道通过
hd
和grep
使用cat
的额外过程快,也可能不快。hdhd
。啊,在我的Redhat Linux上找到了它,hextump
。祝你好运。@Sheller:谢谢,这会让它变得干净一点。当然,Unix工具箱的方法是使用能够很好地完成一件事情的小工具,并依靠管道将解决方案连接在一起(tar
,你在听吗?)。对于您正在尝试的内容,可能有一个特定的工具,但我认为这个解决方案(除了cat
)符合Unix/Linux编程的精神。祝你好运
grep -aP '[^\x00-\x7f]' test.txt > found-highchars
view found-highchars