Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在文件中查找非ASCII代码点_Regex_Linux_Encoding_Grep - Fatal编程技术网

Regex 在文件中查找非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

我目前正在使用此正则表达式查找文件中的非ASCII代码点,无论采用何种编码:

$ 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
的额外过程快,也可能不快。hd?我的RedHat Linux没有
hd
。啊,在我的Redhat Linux上找到了它,
hextump
。祝你好运。@Sheller:谢谢,这会让它变得干净一点。当然,Unix工具箱的方法是使用能够很好地完成一件事情的小工具,并依靠管道将解决方案连接在一起(
tar
,你在听吗?)。对于您正在尝试的内容,可能有一个特定的工具,但我认为这个解决方案(除了
cat
)符合Unix/Linux编程的精神。祝你好运
grep -aP '[^\x00-\x7f]' test.txt > found-highchars
view found-highchars