¿Cómo se vería un awk
guión (presumiblemente una sola línea) para eliminar una lista de materiales ?
Especificación:
- imprimir cada línea después de la primera (
NR > 1
) - para la primera línea: si comienza con
#FE #FF
o#FF #FE
, elimínelos e imprima el resto
unicode
awk
byte-order-mark
Boldewyn
fuente
fuente
awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' INFILE > OUTFILE
y asegúrese de que INFILE y OUTFILE sean diferentes!perl -i.orig -pe 's/^\x{FFFE}//' badfile
, podría confiar en sus envariables PERL_UNICODE y / o PERLIO para la codificación. PERL_UNICODE = SD funcionaría para UTF-8; para los demás, necesitarías PERLIO.awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}1'
Usando GNU
sed
(en Linux o Cygwin):En FreeBSD:
Ventaja de usar GNU o FreeBSD
sed
: el-i
parámetro significa "en el lugar" y actualizará los archivos sin necesidad de redirecciones o trucos extraños.En Mac:
Esta
awk
solución en otra respuesta funciona , pero elsed
comando anterior no funciona. Al menos en Mac (Sierra), lased
documentación no menciona el soporte ala de escape hexadecimal\xef
.Se puede lograr un truco similar con cualquier programa conectando a la
sponge
herramienta desde moreutils :fuente
10.11.6
, esto no funciona, pero la respuesta oficial stackoverflow.com/a/1068700/9636 funciona bien.No awk, pero más simple:
Para comprobar la lista de materiales:
Si BOM está presente, verá:
00000000 ef bb bf ...
fuente
cat file1.utf8 file2.utf8 file3.utf3 > allfiles.utf8
se romperá. Nunca use una lista de materiales en UTF-8. Período.hd
No está disponible en OS X (a partir de 10.8.2), por lo que para comprobar si hay una BOM UTF-8 no se puede utilizar el siguiente:head -c 3 file | od -t x1
.Además de convertir los finales de línea CRLF a LF,
dos2unix
también elimina las listas de materiales:dos2unix
también convierte archivos UTF-16 con una BOM (pero no archivos UTF-16 sin una BOM) a UTF-8 sin una BOM:fuente
Sé que la pregunta estaba dirigida a Unix / Linux, pensé que valdría la pena mencionar una buena opción para los que tienen problemas con Unix (en Windows, con una interfaz de usuario).
Me encontré con el mismo problema en un proyecto de WordPress (BOM estaba causando problemas con el feed de rss y la validación de la página) y tuve que buscar en todos los archivos en un árbol de directorios bastante grande para encontrar el que estaba con BOM. Encontré una aplicación llamada Reemplazar Pioneer y en ella:
Batch Runner -> Buscar (para encontrar todos los archivos en las subcarpetas) -> Reemplazar plantilla -> Binario eliminar lista de materiales (hay una plantilla de búsqueda y reemplazo lista para esto).
No era la solución más elegante y requería instalar un programa, lo cual es una desventaja. Pero una vez que descubrí lo que estaba pasando a mi alrededor, funcionó a las mil maravillas (y encontré 3 archivos de aproximadamente 2300 que tenían BOM).
fuente