テキストファイルの特定の文字列に対してバイナリ検索を実行するには?

テキストファイルの特定の文字列に対してバイナリ検索を実行するには?

多数のレコードを含むテキストファイルがあり、各レコードは1行を占めます。いくつかのレコードに破損した特殊文字があり、上記の複数の文字シーケンスを見つけてそれらを見つけようとします。x80

以下は、無効な文字が強調表示された1行の例です。

ここに画像の説明を入力してください。

興味のある16進文字列は次のとおりです。

49 CC 80 C2 B9 6E

GNU Grepを使用すると、行grep --color='auto' -P -n "[\x80-\xFF]" record.txtの一部のみが一致し、上付きの1(¹)と一致しますが、次は一致しませんÌ

ここに画像の説明を入力してください。

Grepは結合された文字+発音区別記号を分離できないようです...

私が望むのは、x802つ以上の連続した文字を含む行だけを保持し、16進コードに示されている実際の文字と一致することです。つまり、49 CC 80 C2 B9 6Eこれに似たものと一致する必要があるように見えますが、"[\x80-\xFF]{2,10}"この一致は実際には機能しません。

したがって、明確にするためにこれを使用すると、次の行が一致します。

grep --color='auto' -P -n "[\x80-\xFF]" record.txt

しかし、私がそれを使用すると、次のことは起こりません。

grep --color='auto' -P -n "[\x80-\xFF]{2,10}" record.txt

バイトシーケンスはCC 80 C2 B9値を持つ4つの連続バイト文字列なので、2番目のものも一致してはいけませんかx80-xFF

ベストアンサー1

これはロケール設定に関連している可能性があります。その場合は、C(POSIXとも呼ばれます)ロケール(文字はバイトです)を使用すると機能します。

LC_ALL=C grep --color='auto' -P -n "[\x80-\xFF]{2,10}" record.txt

おすすめ記事