Jak wyglądałby awk
skrypt (prawdopodobnie jednolinijkowy) służący do usuwania zestawienia komponentów ?
Specyfikacja:
- wypisz każdy wiersz po pierwszym (
NR > 1
) - dla pierwszego wiersza: jeśli zaczyna się od
#FE #FF
lub#FF #FE
, usuń je i wydrukuj resztę
unicode
awk
byte-order-mark
Boldewyn
źródło
źródło
awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' INFILE > OUTFILE
i upewnij się, że INFILE i OUTFILE są różne!perl -i.orig -pe 's/^\x{FFFE}//' badfile
używałeś, możesz polegać na swoich zmiennych środowiskowych PERL_UNICODE i / lub PERLIO do kodowania. PERL_UNICODE = SD będzie działać dla UTF-8; dla innych potrzebujesz PERLIO.awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}1'
Korzystanie z GNU
sed
(w systemie Linux lub Cygwin):W FreeBSD:
Zaleta korzystania z GNU lub FreeBSD
sed
:-i
parametr oznacza „na miejscu” i będzie aktualizował pliki bez potrzeby przekierowań lub dziwnych sztuczek.Na komputerze Mac:
To
awk
rozwiązanie w innej odpowiedzi działa , alesed
powyższe polecenie nie działa. Przynajmniej na Macu (Sierra)sed
dokumentacja nie wspomina o obsłudze znaków szesnastkowych ucieczki ala\xef
.Podobną sztuczkę można osiągnąć w dowolnym programie, podłączając do
sponge
narzędzia z moreutils :źródło
10.11.6
to nie działa, ale oficjalna odpowiedź stackoverflow.com/a/1068700/9636 działa dobrze.Nie awk, ale prostsze:
Aby sprawdzić BOM:
Jeśli BOM jest obecny, zobaczysz:
00000000 ef bb bf ...
źródło
cat file1.utf8 file2.utf8 file3.utf3 > allfiles.utf8
się zepsuje. Nigdy nie używaj BOM w UTF-8. Kropka.hd
nie jest dostępny na OS X (10.8.2) od dnia, tak aby sprawdzić, czy UTF-8 BOM nie można użyć następujących:head -c 3 file | od -t x1
.Oprócz konwersji zakończeń linii CRLF na LF,
dos2unix
usuwa również zestawienia komponentów:dos2unix
konwertuje również pliki UTF-16 z BOM (ale nie pliki UTF-16 bez BOM) do UTF-8 bez BOM:źródło
Wiem, że pytanie było skierowane do unix / linux, pomyślałem, że warto byłoby wspomnieć o dobrej opcji dla tych, którzy mają problemy z unixem (w Windows, z UI).
Napotkałem ten sam problem w projekcie WordPress (BOM powodował problemy z kanałem rss i walidacją strony) i musiałem zajrzeć do wszystkich plików w dość dużym drzewie katalogów, aby znaleźć ten, który był z BOM. Znalazłem aplikację o nazwie Replace Pioneer i w niej:
Batch Runner -> Search (aby znaleźć wszystkie pliki w podfolderach) -> Replace Template -> Binary remove BOM (jest gotowe wyszukanie i zastąpienie szablonu).
Nie było to najbardziej eleganckie rozwiązanie i wymagało zainstalowania programu, co jest wadą. Ale kiedy dowiedziałem się, co się wokół mnie dzieje, zadziałało to jak urok (i znalazłem 3 pliki z około 2300, które były z BOM).
źródło