2013-10-01 31 views
2

我在使用grep正則表達式時遇到了一些問題。我想給grep裏的人物都是小寫grep正則表達式不正確匹配

我的grep語句如下一些ASCII編碼的十六進制數據:

grep -E "01[a-f0-9]{2}81[a-f0-9]0" log.log 

大多數文件中的比賽看起來正常,除了有無數匹配如下

010481ec070000 
01b481ec070000 
01508129070521 

我找不出爲什麼這些字符串匹配。它們不應該匹配,因爲81後面必須跟一個十六進制字符,然後是零。

我已經做了一些進一步的調查。如果我把這三個字符串放在一個單獨的文件中,並且grep那個文件。我沒有得到任何比賽。不太確定這裏發生了什麼。

這是grep 2.12。

這裏是文件中的原始數據的一部分。這些都是匹配的所有行。和導出LC_ALL = C

input data : 011a81a907000b3002004070eaa3d2240fa81272011763dd0040002001 
input data : 010481e1070000 
input data : 010481ea070000 
input data : 011a81a207000b980f0040681f2b11d2f60202dc003669ba0140006100 
input data : 014681ab07002140010040d2e457f8c00494ed5e014362bf0240006101ae0500404ee311f402feb2165401c562450240005801db08044068f09ff6a6005af953008062470640004d01 
input data : 010481e3070000 
input data : 013081ac070016c0000040f6d963fcb4f7e8127c0103637b0140006f01bf0200408ae344fdd2043eed72018362a30240006f01 
input data : 010481e4070000 
input data : 011a81ad07000b5c06006064f96804901154fed2008e66ff0f4000a401 
input data : 010481e5070000 
input data : 014681ae070021170d004069f196134cf6a805b4000769b6034000be014e0e004092e80820da0b82fbfa000c6c5c014000bf01880a004020d9ce21f4efd40954011469a1004000ae01 
input data : 011a81a607000bef0d0060d60dd6edf8f18e104e015b63d3014000da00 
input data : 011a81af07000b4c0800401cfbb0184a0c28f7fa00516931024000e101 
input data : 015c81a007002c12050020f2ff640028007afd00801205f70540000400280c00404f016a0a10fbd0012a00e769ff0f400018005d020040e3fabd21e00830f4d200c769d80140000300030a004042030 
+0

看起來像一個較老的grep版本! – iamauser

+0

這裏,你的grep命令找不到與你的輸入相匹配的內容(3行)。 grep ver'gnu grep 2.14' – Kent

+3

東西很腥。我也無法重現你的結果,並且正則表達式足夠簡單,以至於不太可能發生錯誤。您是否確定您向我們展示正在執行的正則表達式,以及整個輸入行?它可能是匹配你沒有顯示的行的其他部分?你不會錨定開始或結束行... –

回答

0

嘗試使用環境變量LC_ALL=C執行它後,仍然匹配。區域設置影響grep解釋字符範圍的方式。

0

假設命令與您所說的完全相同......引號是正確的,在grep獲取參數之前沒有文件名全局變量發生,您沒有{0}而不是0等。

我不知道是否-a(將二進制文件視爲文本)是罪魁禍首。二進制輸出可以由終端處理。 (這就是我們如何改變顏色或做咒語定位或什麼的。)

如果你在那裏有二進制刪除部分行嗎?說控制-H的...

會發生什麼,如果你管通過OD -c grep的輸出(或者OD -aOD -TA如果你有的話) 。

如果將輸出存儲在一個文件中,用grep將這樣一行拉出來,然後用od看看會發生什麼?