我有一个在工作中非常方便的命令。它搜索某个特定的细绳在一些十六进制原始文件中文件名。我在Linux系统中经常使用的命令是:
find . -name '**FILENAME**' | while read filename; do
xxd -p $filename | tr -d '\n' | grep -i "**STRING**" > /dev/null
if [ $? -eq 0 ];then
echo "STRING FOUND IN $filename";
fi;
done
我没有构建这个命令。在 HP-UX 系统上,由于 xxd 不存在,我需要使用 xd。但我不知道如何获得与 xxd -p 相同的结果。
如何调整此命令以在 HP-UX 系统上运行?
答案1
我不在 HP-UX 上,因此仅对此进行了检查xd(1):
xd -b -An -v $filename
-An
防止显示偏移量-b
默认为单字节(八进制为od
,十六进制为xd
)-v
防止相同的行被替换为*
(很多系统,包括我的系统,都有od
但没有xd
。所以为了可移植性,我使用了od -tx1 -An -v $filename
。)
这将输出单独的十六进制字节,每个字节之间有一个空格。更改tr
命令tr -d [:space:]
将删除所有空格,而不仅仅是换行符。
将所有这些结合在一起,您需要替换脚本的xxd
和tr
部分,以便该行如下所示:
xd -b -An -v $filename | tr -d '[:space:]' | grep -i "**STRING**" > /dev/null
答案2
命令
xxd -p < file | tr -d '\n'
可以用简单的 perl 脚本替换
perl -ne 'foreach $c (split(//,$_)) { printf "%02x",ord($c)}' < file