HP-UX 的“xxd -p”替代方案 - 如何获得与“xd”相同的结果?

HP-UX 的“xxd -p”替代方案 - 如何获得与“xd”相同的结果?

我有一个在工作中非常方便的命令。它搜索某个特定的细绳在一些十六进制原始文件中文件名。我在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:]将删除所有空格,而不仅仅是换行符。

将所有这些结合在一起,您需要替换脚本的xxdtr部分,以便该行如下所示:

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

相关内容