linux - 在 Linux 上的多个图像中搜索特定的给定十六进制字符串

标签 linux string grep pattern-matching xxd

我正在研究图像处理,我想知道是否可以在各种图像中搜索特定的十六进制字符串/字节数组。如果它给我一个包含该特定字符串的图像列表,那就太好了。基本上是 grep -r ""的作用。由于某种原因,grep 无法完成这项工作。我不熟悉字符串。我确实看过“man strings”,但没有太大帮助。无论如何,我想在同一文件夹中的多个图像中寻找特定的十六进制字符串,例如“0002131230443”(或者甚至是特定的字节数组,即 base64 字符串)。任何帮助将不胜感激。

我发现这段代码使用 xxd 和 grep 完全符合我的要求。请在下面找到命令: xxd -p/你的/文件 | tr -d '\n' | grep -c '22081b00081f091d2733170d123f3114'

仅供引用: 如果内容匹配,它将返回 1,否则返回 0。

xxd -p 将文件转换为纯十六进制转储,tr -d '\n' 删除 xxd 添加的换行符,grep -c 计算匹配的行数。

有谁知道如何使用 bash 脚本在特定目录中运行上面的代码。我有大约 400 张图片,如果所有 400 张图片都具有该特定字符串,我希望它只返回 400 张(即字符串匹配计数)。我在下面找到了这个脚本代码,但它一遍又一遍地运行相同的代码 400 次,每次返回 0 或 1:

#!/bin/bash

FILES=/FILEPATH/*
for f in $FILES
do
   echo "PROCESSING $f FILES"
   echo "-------------------"
   XXD -u $f | grep ABCD
   echo "-------------------"
done

谢谢你们。

等 ionic 33

最佳答案

使用 GNU grep:

#!/bin/bash

files=/FILEPATH/*
for f in $files
do
  grep -m 1 -P '\x22\x08\x1b\x00' < "$f"
done | wc -l

关于linux - 在 Linux 上的多个图像中搜索特定的给定十六进制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37086992/

相关文章:

linux - 如何在 Perl 脚本中调用函数(在 shell 脚本中定义)

linux - 为什么创建 Docker 网络会随机中断与我的 Jenkins 服务器的所有连接?

mysql - 带有 WHERE 子句的 SELECT 作为字符串存储在另一个表中

bash - 使用 grep 或 awk 提取从唯一字符到唯一字符的一系列数据

linux - 无法附加到运行 Docker 容器的 bash

linux - 我想使用 Basic authtype 处理 CUPS 身份验证,如何自定义 PAM?

javascript - 我如何从特定位置开始将该字符串分成两部分

c++ - C/C++ 中的跨平台通用文本处理

regex - 在同一行中匹配模式 n 次的行

linux - Grep 命令错误