Stripping hex-bytes mit sed - keine übereinstimmung

Ich habe eine text-Datei mit zwei nicht-ascii-bytes (0xFF und 0xFE):

??58832520.3,ABC
348384,DEF

Hex für diese Datei ist:

FF FE 35 38 38 33 32 35 32 30 2E 33 2C 41 42 43 0A 33 34 38 33 38 34 2C 44 45 46

Es ist Zufall, dass FF und FE zufällig die führenden bytes (Sie gibt es in meiner Datei, obwohl scheinbar immer am Anfang der Zeile).

Ich versuche, mich zu entkleiden diese bytes mit sed, aber nichts, was ich tun scheint, um Ihnen passen.

$ sed 's/[^a-zA-Z0-9\,]//g' test.csv 
??588325203,ABC
348384,DEF

$ sed 's/[a-zA-Z0-9\,]//g' test.csv 
??.

Wichtigste Frage: Wie kann ich diese Streifen bytes?

Bonus-Frage: Die beiden regex über direkte Negationen, so einer von Ihnen logisch zu filtern bytes, richtig? Warum tun diese beiden regex-match die 0xFF und 0xFE Byte?

Update: der direkte Weg der Strippen aus einem Spektrum von hex-byte (vorgeschlagen von zwei Antworten weiter unten) scheint zu Streifen heraus, der erste "legit" byte aus jeder Zeile, und lassen Sie die bytes, die ich versuche, loszuwerden:

$sed 's/[\x80-\xff]//' test.csv
??8832520.3,ABC
48384,DEF

FF FE 38 38 33 32 35 32 30 2E 33 2C 41 42 43 0A 34 38 33 38 34 2C 44 45 46 0A

Beachten Sie das fehlende "5" und "3" aus dem Anfang jeder Zeile, und die neue 0A Hinzugefügt, um das Ende der Datei.

Größeren Update: Das problem scheint zu sein, system-spezifisch. Das problem wurde beobachtet, die auf OSX, aber die Vorschläge (einschließlich meiner ursprünglichen sed-Anweisung oben) Arbeit, wie ich Sie erwarte, um auf NetBSD.

Eine Lösung: mit Dieser Aufgabe scheint einfach genug, über Perl:

$ perl -pe 's/^\xFF\xFE//' test.csv
58832520.3,ABC
348384,DEF

Jedoch lasse ich diese Frage offen, da dies nur ein workaround, und nicht erklären, was das problem mit sed.

InformationsquelleAutor G__ | 2010-08-08
Schreibe einen Kommentar