我想检查文件是否与二进制模式匹配。
为此,我正在使用 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 工具。谢谢。