Wie würde ein awk
Skript (vermutlich ein Einzeiler) zum Entfernen einer Stückliste aussehen?
Spezifikation:
- drucke jede Zeile nach der ersten (
NR > 1
) - für die erste Zeile: Wenn es mit
#FE #FF
oder beginnt#FF #FE
, entfernen Sie diese und drucken Sie den Rest
unicode
awk
byte-order-mark
Boldewyn
quelle
quelle
awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' INFILE > OUTFILE
und stellen Sie sicher, dass INFILE und OUTFILE unterschiedlich sind!perl -i.orig -pe 's/^\x{FFFE}//' badfile
Sie sich bei der Codierung auf Ihre Variablen PERL_UNICODE und / oder PERLIO verlassen. PERL_UNICODE = SD würde für UTF-8 funktionieren; für die anderen brauchst du PERLIO.awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}1'
Verwenden von GNU
sed
(unter Linux oder Cygwin):Auf FreeBSD:
Vorteil der Verwendung von GNU oder FreeBSD
sed
: Der-i
Parameter bedeutet "an Ort und Stelle" und aktualisiert Dateien, ohne dass Umleitungen oder seltsame Tricks erforderlich sind.Auf dem Mac:
Diese
awk
Lösung in einer anderen Antwort funktioniert , aber dersed
obige Befehl funktioniert nicht. Zumindest in der Mac (Sierra)sed
-Dokumentation wird nicht erwähnt, dass hexadezimales Escape-Ala unterstützt wird\xef
.Ein ähnlicher Trick kann mit jedem Programm erreicht werden, indem
sponge
von moreutils zum Werkzeug geleitet wird :quelle
10.11.6
funktioniert dies nicht, aber die offizielle Antwort stackoverflow.com/a/1068700/9636 funktioniert einwandfrei .Nicht awk, aber einfacher:
So überprüfen Sie die Stückliste:
Wenn Stückliste vorhanden ist, sehen Sie:
00000000 ef bb bf ...
quelle
cat file1.utf8 file2.utf8 file3.utf3 > allfiles.utf8
wird gebrochen. Verwenden Sie niemals eine Stückliste für UTF-8. Zeitraum.hd
ist unter OS X (ab 10.8.2) nicht verfügbar. Um dort nach einer UTF-8-Stückliste zu suchen, können Sie Folgendes verwenden :head -c 3 file | od -t x1
.Zusätzlich zum Konvertieren von CRLF-Zeilenenden in LF werden
dos2unix
auch Stücklisten entfernt:dos2unix
konvertiert auch UTF-16-Dateien mit einer Stückliste (jedoch nicht UTF-16-Dateien ohne Stückliste) in UTF-8 ohne Stückliste:quelle
Ich weiß, dass die Frage an Unix / Linux gerichtet war, dachte, es wäre wert, eine gute Option für Unix-herausgeforderte (unter Windows, mit einer Benutzeroberfläche) zu erwähnen.
Bei einem WordPress-Projekt stieß ich auf dasselbe Problem (die Stückliste verursachte Probleme mit dem RSS-Feed und der Seitenüberprüfung) und musste alle Dateien in einem ziemlich großen Verzeichnisbaum untersuchen, um die Datei mit der Stückliste zu finden. Es wurde eine Anwendung namens Replace Pioneer gefunden und darin:
Batch Runner -> Suchen (um alle Dateien in den Unterordnern zu finden) -> Vorlage ersetzen -> Binär Stückliste entfernen (hierfür gibt es eine vorgefertigte Vorlage zum Suchen und Ersetzen).
Es war nicht die eleganteste Lösung und erforderte die Installation eines Programms, was ein Nachteil ist. Aber als ich herausfand, was um mich herum vorging, funktionierte es wie ein Zauber (und ich fand 3 Dateien von ungefähr 2300, die mit Stückliste waren).
quelle