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/

相关文章:

php - opencats安装报错

linux - 如何删除导出的环境变量?

linux - 尝试 "No symbol table is loaded"时 GDB 的 "strace"

shell - Learning Shell - 创建一个带有参数的脚本,运行两个单独的 cli 应用程序

grep - 如何避免lookbehind断言不是固定长度

linux - 更改 AWK 读取文件的方式

c# - 使用 yield 生成给定长度的所有子字符串

iphone - 我试图将一个字符串从我的第一个 ViewController 传递到我的第二个 ViewController 但它返回 NULL

string - JavaScript 字符串多次替换

bash - Grep 变量十六进制值