Qual seria a aparência de um awk
script (presumivelmente de uma linha) para remover um BOM ?
Especificação:
- imprimir todas as linhas após a primeira (
NR > 1
) - para a primeira linha: se começar com
#FE #FF
ou#FF #FE
, remova-os e imprima o resto
unicode
awk
byte-order-mark
Boldewyn
fonte
fonte
awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' INFILE > OUTFILE
e certifique-se de que INFILE e OUTFILE são diferentes!perl -i.orig -pe 's/^\x{FFFE}//' badfile
pode contar com suas variáveis de ambiente PERL_UNICODE e / ou PERLIO para a codificação. PERL_UNICODE = SD funcionaria para UTF-8; para os outros, você precisaria do PERLIO.awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}1'
Usando GNU
sed
(no Linux ou Cygwin):No FreeBSD:
Vantagem de usar GNU ou FreeBSD
sed
: o-i
parâmetro significa "no lugar" e atualizará os arquivos sem a necessidade de redirecionamentos ou truques estranhos.No Mac:
Esta
awk
solução em outra resposta funciona , mas osed
comando acima não funciona. Pelo menos no Mac (Sierra)sed
não menciona o suporte de ala de escape hexadecimal\xef
.Um truque semelhante pode ser alcançado com qualquer programa direcionando para a
sponge
ferramenta de moreutils :fonte
10.11.6
, isso não funciona, mas a resposta oficial stackoverflow.com/a/1068700/9636 funciona bem.Não awk, mas mais simples:
Para verificar o BOM:
Se o BOM estiver presente, você verá:
00000000 ef bb bf ...
fonte
cat file1.utf8 file2.utf8 file3.utf3 > allfiles.utf8
vai ser quebrado. Nunca use um BOM em UTF-8. Período.hd
não está disponível no Mac OS X (a partir de 10.8.2), de modo a verificar a existência de um UTF-8 BOM lá você pode usar o seguinte:head -c 3 file | od -t x1
.Além de converter terminações de linha CRLF em LF,
dos2unix
também remove BOMs:dos2unix
também converte arquivos UTF-16 com BOM (mas não arquivos UTF-16 sem BOM) em UTF-8 sem BOM:fonte
Sei que a pergunta foi direcionada ao unix / linux, achei que valeria a pena citar uma boa opção para quem tem desafios para unix (em windows, com UI).
Eu encontrei o mesmo problema em um projeto WordPress (o BOM estava causando problemas com feed de rss e validação de página) e tive que examinar todos os arquivos em uma árvore de diretório bem grande para encontrar aquele que estava com o BOM. Encontrou um aplicativo chamado Replace Pioneer e nele:
Batch Runner -> Pesquisar (para encontrar todos os arquivos nas subpastas) -> Substituir modelo -> BOM remover BOM (há um modelo pronto de pesquisa e substituição para isso).
Não era a solução mais elegante e exigia a instalação de um programa, o que é uma desvantagem. Mas depois que descobri o que estava acontecendo ao meu redor, funcionou perfeitamente (e encontrei 3 arquivos entre cerca de 2300 que estavam com o BOM).
fonte