Wygląda na to, że kropka w środku zdania podrzędnego jest za duża (przynajmniej mój awk narzeka na to). Poza tym to jest dokładnie to, czego szukałem, dzięki!
To rozwiązanie działa jednak tylko w przypadku plików zakodowanych w UTF-8. Dla innych, takich jak UTF-16, zapoznaj się z odpowiednią reprezentacją BOM w Wikipedii: en.wikipedia.org/wiki/Byte_order_mark
Jeśli perl -i.orig -pe 's/^\x{FFFE}//' badfileuż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.
Korzystanie z GNU sed(w systemie Linux lub Cygwin):
# Removing BOM from all text files in current directory:
sed -i '1 s/^\xef\xbb\xbf//'*.txt
W FreeBSD:
sed -i .bak '1 s/^\xef\xbb\xbf//'*.txt
Zaleta korzystania z GNU lub FreeBSD sed: -iparametr oznacza „na miejscu” i będzie aktualizował pliki bez potrzeby przekierowań lub dziwnych sztuczek.
Na komputerze Mac:
To awkrozwiązanie w innej odpowiedzi działa , ale sedpowyższe polecenie nie działa. Przynajmniej na Macu (Sierra) seddokumentacja nie wspomina o obsłudze znaków szesnastkowych ucieczki ala \xef.
Podobną sztuczkę można osiągnąć w dowolnym programie, podłączając do spongenarzędzia z moreutils :
Warto zauważyć, że te polecenia zastępują jedną określoną sekwencję bajtów, która jest jednym z możliwych znaczników kolejności bajtów . Być może twój plik miał inną sekwencję BOM. (Nie mogę nic na to poradzić, ponieważ nie mam Maca)
@KarolyHorvath Mam na myśli to, że psuje wiele programów . Czy to nie to, co powiedziałem? Po otwarciu strumienia w kodowaniu UTF-16 lub UTF-32 dekoder wie, że nie liczy BOM. Kiedy używasz UTF-8, dekodery przedstawiają BOM jako dane. To jest błąd składni w niezliczonych programach. Nawet dekoder Java zachowuje się w ten sposób, WEDŁUG PROJEKTU! BOMy na plikach UTF-8 są źle umieszczone i ból w tyłku: to błąd! Wiele rzeczy psują. Nawet po prostu cat file1.utf8 file2.utf8 file3.utf3 > allfiles.utf8się zepsuje. Nigdy nie używaj BOM w UTF-8. Kropka.
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).
Bardzo się cieszę, gdy znalazłem Twoje rozwiązanie, jednak nie mam uprawnień do instalowania oprogramowania na firmowym komputerze. Zajęło mi to dużo czasu, zanim wymyśliłem alternatywę: Używanie Notepad ++ z wtyczką PythonScript. superuser.com/questions/418515/… Mimo wszystko dzięki!
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.