使用awk删除字节顺序标记
 awk脚本(大概是单行)如何去除BOM ? 
规范:
-  打印每行之后( NR > 1)
-  对于第一行:如果以#FE #FF或#FF #FE,则删除它们并打印剩下的部分
尝试这个:
 awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}{print}' INFILE > OUTFILE 
在第一条logging(行)上,删除BOM字符。 打印每个logging。
或者稍微短一些,使用awk中的默认操作是打印logging的知识:
 awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}1' INFILE > OUTFILE 
  1是总是评估为真的最短条件,所以每条logging都被打印出来。 
请享用!
– 附录 –
Unicode字节顺序标记(BOM)常见问题包括下表,列出了每种编码的确切BOM字节:
 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 
 因此,您可以看到\xef\xbb\xbf对应于上表中的EF BB BF UTF-8 BOM字节。 
 使用GNU sed (在Linux或Cygwin上): 
 # Removing BOM from all text files in current directory: sed -i '1 s/^\xef\xbb\xbf//' *.txt 
在FreeBSD上:
 sed -i .bak '1 s/^\xef\xbb\xbf//' *.txt 
 使用GNU或FreeBSD sed优点: -i参数意味着“到位”,并且将更新文件,而不需要redirect或怪异的技巧。 
在Mac上:
  这个awk解决scheme在另一个答案的作品 ,但上面的sed命令不起作用。 至less在Mac(Sierra) sed文档中没有提到支持hex转义的ala \xef 。 
 任何程序都可以通过从moreutilspipe道到sponge工具来实现类似的技巧: 
 awk '…' INFILE | sponge INFILE 
不awk,但更简单:
 tail -c +4 UTF8 > UTF8.nobom 
检查BOM:
 hd -n 3 UTF8 
 如果BOM存在,您将看到: 00000000 ef bb bf ... 
 除了将CRLF行结尾转换为LF之外, dos2unix还会删除物料清单: 
 dos2unix *.txt 
  dos2unix还可以将带有BOM的UTF-16文件(不包含没有BOM的UTF-16文件)转换为不带BOM的UTF-8: 
 $ printf '\ufeffä\n'|iconv -f utf-8 -t utf-16be>bom-utf16be $ printf '\ufeffä\n'|iconv -f utf-8 -t utf-16le>bom-utf16le $ printf '\ufeffä\n'>bom-utf8 $ printf 'ä\n'|iconv -f utf-8 -t utf-16be>utf16be $ printf 'ä\n'|iconv -f utf-8 -t utf-16le>utf16le $ printf 'ä\n'>utf8 $ for f in *;do printf '%11s %s\n' $f $(xxd -p $f);done bom-utf16be feff00e4000a bom-utf16le fffee4000a00 bom-utf8 efbbbfc3a40a utf16be 00e4000a utf16le e4000a00 utf8 c3a40a $ dos2unix -q * $ for f in *;do printf '%11s %s\n' $f $(xxd -p $f);done bom-utf16be c3a40a bom-utf16le c3a40a bom-utf8 c3a40a utf16be 00e4000a utf16le e4000a00 utf8 c3a40a 
 我知道这个问题是针对unix / linux,认为这是值得提到的unix挑战(在Windows上,用户界面)的一个很好的select。 
 我在一个WordPress项目上碰到了同样的问题(BOM导致了RSS源和页面validation的问题),我不得不查看一个相当大的目录树中的所有文件来findBOM中的文件。 find一个叫做Replace Pioneer的应用程序,并在其中: 
批量转轮 – >search(查找子文件夹中的所有文件) – >replace模板 – >二进制删除BOM(有一个现成的search和replace模板)。
这不是最优雅的解决scheme,它需要安装一个程序,这是一个缺点。 但是一旦我发现周围发生了什么事情,它就像一个魅力(并发现大约2300与BOM中的3个文件)。