
職場で非常に便利なコマンドがあります。特定の項目を検索します。ひも一部の16進生ファイルからファイル名。 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
デフォルトは1バイトです(8進数はod
、16進数はxd
)。-v
同じ行が次に置き換えられるのを防ぎます。*
(私を含む多くのシステムにはこの機能がありod
ますがありませんxd
。だから移植性のために使用しましたod -tx1 -An -v $filename
。)
これにより、各バイト間にスペースがある個々の16進バイトが出力されます。tr
コマンドを変更すると、tr -d [:space:]
改行文字だけでなくすべてのスペースが削除されます。
これらすべてを 1 つにまとめるには、スクリプトの部分と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