Bagaimana awk
skrip (mungkin satu baris) untuk menghapus BOM terlihat seperti?
Spesifikasi:
- cetak setiap baris setelah yang pertama (
NR > 1
) - untuk baris pertama: Jika diawali dengan
#FE #FF
atau#FF #FE
, hapus itu dan cetak sisanya
unicode
awk
byte-order-mark
Boldewyn
sumber
sumber
awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' INFILE > OUTFILE
dan pastikan INFILE dan OUTFILE berbeda!perl -i.orig -pe 's/^\x{FFFE}//' badfile
Anda bisa mengandalkan PERL_UNICODE dan / atau PERLIO envariabel untuk encoding. PERL_UNICODE = SD akan berfungsi untuk UTF-8; untuk yang lain, Anda membutuhkan PERLIO.awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}1'
Menggunakan GNU
sed
(di Linux atau Cygwin):Di FreeBSD:
Keuntungan menggunakan GNU atau FreeBSD
sed
:-i
parameternya berarti "di tempat", dan akan memperbarui file tanpa perlu pengalihan atau trik aneh.Di Mac:
awk
Solusi ini di jawaban lain berfungsi , tetapised
perintah di atas tidak berfungsi. Setidaknya padased
dokumentasi Mac (Sierra) tidak disebutkan dukungan pelolosan heksadesimal ala\xef
.Trik serupa dapat dicapai dengan program apa pun dengan menyalurkan ke
sponge
alat dari moreutils :sumber
10.11.6
, ini tidak berfungsi, tetapi jawaban resmi stackoverflow.com/a/1068700/9636 berfungsi dengan baik.Tidak awk, tapi lebih sederhana:
Untuk memeriksa BOM:
Jika BOM hadir, Anda akan melihat:
00000000 ef bb bf ...
sumber
cat file1.utf8 file2.utf8 file3.utf3 > allfiles.utf8
akan rusak. Jangan pernah menggunakan BOM pada UTF-8. Titik.hd
tidak tersedia pada OS X (per 10.8.2), sehingga untuk memeriksa untuk UTF-8 BOM sana Anda dapat menggunakan berikut:head -c 3 file | od -t x1
.Selain mengubah ujung baris CRLF ke LF,
dos2unix
juga menghapus BOM:dos2unix
juga mengonversi file UTF-16 dengan BOM (tetapi bukan file UTF-16 tanpa BOM) menjadi UTF-8 tanpa BOM:sumber
Saya tahu pertanyaan itu ditujukan pada unix / linux, saya pikir akan bermanfaat untuk menyebutkan opsi yang bagus untuk unix-challenge (di windows, dengan UI).
Saya mengalami masalah yang sama pada proyek WordPress (BOM menyebabkan masalah dengan rss feed dan validasi halaman) dan saya harus melihat semua file di pohon direktori yang cukup besar untuk menemukan file yang ada di BOM. Menemukan aplikasi bernama Replace Pioneer dan di dalamnya:
Batch Runner -> Search (untuk menemukan semua file di subfolder) -> Replace Template -> Binary remove BOM (ada pencarian yang sudah jadi dan ganti template untuk ini).
Itu bukan solusi yang paling elegan dan memang membutuhkan penginstalan program, yang merupakan sisi negatifnya. Tapi begitu saya menemukan apa yang terjadi di sekitar saya, itu bekerja seperti pesona (dan menemukan 3 file dari sekitar 2300 yang ada dengan BOM).
sumber