【发布时间】:2012-11-20 18:54:11
【问题描述】:
我想检查文件内部是否匹配二进制模式。
为此,我正在使用 clamAV 签名数据库
Trojan.Bancos-166:1:*:3d415d736715ab5ee347238cacac61c7123fe35427224d25253c7b035558baf19e54e8d1a82742d6a7b37afc6d91015f751de1102d0a31e66ec33b74034b1ab471cc1381884dfdf0bb3e4233bd075fef235f342302ffd72ecabfa5aedf1b3dc99b3348346db4d9001026aef44c592fee61493f7262ad2bd1bce8a7ce60d81022533f6473ae184935f25cf6cc07c3aebfdf70a5a09139
我对此进行编码以检索十六进制字符串表示签名
signature=$(echo "$line" |awk -F':' '{ print $4 }')
此外,我将十六进制字符串更改为二进制
printf -v variable $(sed 's/\(..\)/\\x\1/g;' <<< "$signature")
直到这里它完美运行。
最后我想检查我的文件(*$raw_file_path*)是否与我的二进制模式匹配(现在在 $variable 中) 我试试这个
test_var=$(grep -qU "$variable" "$raw_file_path")
或
test_var=$(grep -qU --regexp="$variable" "$raw_file_path")
我不知道为什么它不起作用,Grep 不匹配任何东西 . 有时还会出现一些错误:
grep:尾部反斜杠
grep:正则表达式无效
我知道它处理模式匹配问题。 在我的测试中,我不想使用正则表达式。
如果您有任何想法,或其他 bash 工具。 谢谢。
【问题讨论】:
-
继续@Sampson-chen 的回答,在添加将输出保存到多变的。祝你好运。