2

grep 正規表現に問題があります。文字がすべて小文字であるASCIIコード化された16進数データをgrepしようとしています

私のgrepステートメントは次のとおりです。

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

次のように多数の一致があることを除いて、ファイル内の一致のほとんどは問題ないように見えます

010481ec070000
01b481ec070000
01508129070521

これらの文字列が一致する理由がわかりません。81 の後に 16 進文字とゼロが続く必要があるため、これらは一致しないはずです。

私はさらにいくつかの調査を行いました。これら 3 つの文字列を別のファイルに配置し、そのファイルを 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
4

2 に答える 2

0

環境変数で実行してみてくださいLC_ALL=C。ロケールは、 がgrep文字範囲を解釈する方法に影響します。

于 2013-10-01T22:59:37.623 に答える
0

コマンドがあなたの言うとおりであると仮定すると...引用符は正しく、grepが引数を取得する前にファイル名のグロブが進行していない、0の代わりに{0}がないなど....

-a (バイナリファイルをテキストとして扱う)が原因なのだろうか。バイナリ出力は端末で処理できます。(これが、色を変更したり、curses の配置などを行ったりする方法です。)

行の一部を消去したバイナリがそこにある場合はどうなりますか? control-H と言って...

grep の出力をod -c (あるいは、もしあればod -aまたはod -ta ) でパイプするとどうなるでしょうか。

出力をファイルに保存し、そのような行を 1 行だけ grep で取り出して、od で調べるとどうなりますか?

于 2013-10-02T15:16:42.453 に答える