我有一个带有BOM的UTF-8编码文件,并且想要删除BOM。是否有任何Linux命令行工具可从文件中删除BOM?
$ file test.xml test.xml: XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines
BOM是Unicode代码点U + FEFF;UTF-8编码由三个十六进制值0xEF,0xBB,0xBF组成。
使用bash,您可以创建带有$''特殊引号形式的UTF-8 BOM,该形式实现Unicode转义:$'\uFEFF'。因此,使用bash,从文本文件的开头删除UTF-8 BOM的可靠方法是:
$''
$'\uFEFF'
sed -i $'1s/^\uFEFF//' file.txt
如果文件不是以UTF-8 BOM开始,则文件将保持不变,否则将删除BOM。
如果您使用其他外壳程序,则可能会"$(printf '\ufeff')"产生产生BOM字符的情况(与zsh任何没有printf内置外壳程序的外壳程序一起使用,只要/usr/bin/printf是Gnu版本即可),但是如果您想要Posix兼容的版本,则可以使用:
"$(printf '\ufeff')"
zsh
printf
/usr/bin/printf
sed "$(printf '1s/^\357\273\277//)" file.txt
(-i就地编辑标志也是Gnu扩展;此版本将可能已修改的文件写入stdout。)
-i