Try this:
awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}{print}' INFILE > OUTFILE
Sul primo record (riga), rimuovere i caratteri BOM. Stampa ogni record.
o leggermente più corta, utilizzando le conoscenze che l'azione predefinita in awk è quello di stampare il record:
awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}1' INFILE > OUTFILE
1
è la condizione più breve che restituisce sempre vero, così ogni record viene stampato.
Divertiti!
- ADDENDUM -
Unicode Byte Order Mark (BOM) FAQ include la seguente tabella elenca l'esatto BOM byte per ogni codifica:
Bytes | Encoding Form
--------------------------------------
00 00 FE FF | UTF-32, big-endian
FF FE 00 00 | UTF-32, little-endian
FE FF | UTF-16, big-endian
FF FE | UTF-16, little-endian
EF BB BF | UTF-8
Così, si può vedere come \xef\xbb\xbf
corrisponde a EF BB BF
UTF-8
BOM byte da la tabella sopra.
sembra che il punto in mezzo della dichiarazione sub è troppo (almeno, il mio awk lamenta). Accanto a questo è esattamente quello che ho cercato, grazie! – Boldewyn
Questa soluzione, tuttavia, funziona ** solo ** per i file codificati UTF-8. Per gli altri, come UTF-16, consultare Wikipedia per la rappresentazione BOM corrispondente: http://en.wikipedia.org/wiki/Byte_order_mark – Boldewyn
Sono d'accordo con il commento precedente; il punto non appartiene al centro di questa affermazione e rende questo piccolo frammento altrimenti un esempio di un errore di sintassi awk. –