regex - 在文件中查找非 ASCII 代码点

标签 regex linux encoding grep

我目前正在使用这个正则表达式来查找文件中的非 ASCII 代码点,无论是什么编码:

$ cat test.txt | hd | grep -P " [8-9a-f][\da-f]"

是否有更好、更简洁或不那么 hacky 的方法? 我通常使用 grep -P "[^\x00-\x7f]" 来查找令人反感的内容字符,但在这里我要查找令人反感的代码点

请注意,当前的 hacky 方法确实具有显示周围 ASCII 字符的良好副作用,这对于上下文非常有用。

最佳答案

使用高清,这应该会更快:

hd test.txt |grep -w '[89a-f][0-9a-f]'

(grep -P 调用 libpcre 并且速度较慢。grep -w 仅搜索“单词”并将默认为标准 posix 正则表达式,这几乎与-F 纯文本查询。从管道中删除 cat 也可以节省(微不足道的)工作量。)

如果你不想要上下文,你可以给 grep -o 标志。如果你想更清楚地调用上下文,请考虑 --color (或者甚至 --color=always 如果你在某处管道输出并且不介意着色控制字符)。您可能还会发现 grep 的 -n 标志很有用,它会为您提供行号。

认为您可以使用 grep 的 -a 标志在单个命令中实现您要查找的内容(这会强制所有内容都作为文本而不是无用的“二进制文件 test.txt 匹配”输出),尽管您可能不喜欢输出对终端的影响。也许将其通过管道传输到文件中,然后使用 vim 查看该文件(与 less 不同,它不会呈现控制字符):

grep -aP '[^\x00-\x7f]' test.txt > found-highchars
view found-highchars

这可能比通过 hdgrep 管道更快,也可能不会更快。

关于regex - 在文件中查找非 ASCII 代码点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22199706/

相关文章:

firefox - 您认为 Google 如何处理此编码问题?

php - 只允许字母、数字、空格、逗号、句点的正则表达式?

jquery - jQuery 选择器中的正则表达式

java - URL 的正则表达式模式匹配

python - 隐藏从自定义 CLI 应用程序生成的 json 文件格式数据?

c - 如何写入来自父进程的 getpass() 输入?

regex - vscode 片段 - 多个正则表达式转换文件路径+文件名

linux - Linux 中从一个进程到另一个进程的地址映射

encoding - paypal ipn编码错误问题

java - 源代码是否应该以 UTF-8 格式保存