2013-03-11 51 views
4

我需要計算二進制文件中十六進制字符串0xFF 0x84 0x03 0x07的出現次數,沒有太多的麻煩...有沒有一種快速的方式來從Linux命令行或我應該編寫專用代碼來完成它嗎?計算二進制數據的出現次數

回答

0

你試過grep -a

-a, --text 
       Process a binary file as if it were text; this is equivalent to the --binary-files=text option. 
0

使用hexdump都喜歡

hexdump -v -e '"0x" 1/1 "%02X" " "' <filename> | grep -oh "0xFF 0x84 0x03 0x07" |wc -w

hexdump將輸出二進制文件中像0xNN

grep給定的格式將找到的所有出現:

從grep的手冊頁

該字符串沒有考慮在一條線上重複的相同的字符

wc會給你最終計

0

如何:

$ hexdump a.out | grep -Ec 'ff ?84 ?03 ?07' 
0

這並不完全回答你的問題,但是當搜索字符串是ASCII,但該文件是二進制文件沒有解決的問題:

cat binaryfile | sed 's/SearchString/SearchString\n/g' | grep -c SearchString 

基本上,'grep'幾乎就在那裏,除非它只計算一次發生,如果之間沒有換行字節,所以我添加了新行字節。

1

如果您的grep版本採用-P參數,則可以使用grep -a -P在二進制文件內搜索任意二進制字符串。你想要什麼,這是接近:

grep -a -c -P '\xFF\x84\x03\x07' myfile.bin 
  • -a確保二進制文件不會被跳過

  • -c輸出計

  • -P指定您模式是一個Perl的正表達式,它允許字符串包含上述\xNN格式的十六進制字符。

不幸的是,grep -c將只計算模式出現的「線」的數量,即使出現多次上線。 (我不知道爲什麼這將是一個理想的功能)。

要獲得事件的確切數量與grep,看來你需要做的:

grep -a -o -P '\xFF\x84\x03\x07' myfile.bin | wc -l 

grep -o每場比賽析出到自己的路線,並wc -l計數線。請注意,這取決於您的二進制字符串不包含換行符。