Wie kann ich in einer Textdatei eine binäre Suche nach einer bestimmten Zeichenfolge durchführen?

Wie kann ich in einer Textdatei eine binäre Suche nach einer bestimmten Zeichenfolge durchführen?

Ich habe eine Textdatei, die eine große Anzahl von Datensätzen enthält, die jeweils in einer einzelnen Zeile stehen. Einige der Datensätze enthalten beschädigte Sonderzeichen, und ich versuche, diese zu finden, indem ich nach mehreren Zeichenfolgen suche, die höher sind alsx80

Hier ist ein einzeiliges Beispiel mit hervorgehobenen falschen Zeichen:

Bildbeschreibung hier eingeben

Die relevante Hexadezimalzeichenfolge lautet:

49 CC 80 C2 B9 6E

Wenn ich GNU Grep verwende, grep --color='auto' -P -n "[\x80-\xFF]" record.txtstimmt nur ein Teil der Zeile überein, nämlich die hochgestellte 1 ( ¹), nicht aber das Ì:

Bildbeschreibung hier eingeben

Grep scheint nicht in der Lage zu sein, die Kombination aus Buchstaben und diakritischen Zeichen aufzuteilen …

Ich möchte nur die Zeilen behalten, die zwei oder mehr aufeinanderfolgende x80Zeichen haben – und in der Lage sein, mit den tatsächlichen Zeichen übereinzustimmen, die im Hex-Code auftauchen – es 49 CC 80 C2 B9 6Escheint also, als ob es mit etwas wie übereinstimmen sollte "[\x80-\xFF]{2,10}"– aber dieser Abgleich funktioniert nicht.

Zur Klarstellung: Wenn ich dies verwende, stimmt die Zeile überein mit:

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

Aber wenn ich dies verwende, passiert Folgendes nicht:

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

Sollte das Zweite nicht auch übereinstimmen, da die Bytefolge ist, CC 80 C2 B9die eine Zeichenfolge aus 4 aufeinanderfolgenden Bytes mit den Werten ist x80-xFF?

Antwort1

Dies könnte mit dem Gebietsschema zusammenhängen. Wenn ja, könnte die Verwendung des Gebietsschemas C (auch bekannt als POSIX), bei dem Zeichen Bytes sind, funktionieren:

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

Antwort2

Grep kann bei ungewöhnlichen Zeichen fehlerhaft sein. Versuchen Sie Folgendes:

grep --color='auto' -P -n "[\x80-\xFF]" record.txt |  iconv -f utf-16 -t utf-16

Möglicherweise erhalten Sie Ihre Buchstaben zurück, aber Ihre Farben gehen verloren. Es könnte sich lohnen, mit UTF-16 und UTF-8 herumzuspielen.

Und stellen Sie sicher, dass Ihre Konsole UFT-8 verarbeiten kann und nicht einer ANSI-Einstellung zugewiesen ist.

verwandte Informationen