我有一个带有 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
答案1
如果您不确定文件是否包含 UTF-8 BOM,那么(假设 的 GNU 实现sed
)将删除 BOM(如果存在),或者如果不存在则不进行任何更改。
sed '1s/^\xEF\xBB\xBF//' < orig.txt > new.txt
您还可以使用以下选项覆盖现有文件-i
:
sed -i '1s/^\xEF\xBB\xBF//' orig.txt
如果您使用的是 BSD 版本sed
(例如 macOS),那么您需要让 bash 进行转义:
sed $'1s/\xef\xbb\xbf//' < orig.txt > new.txt
答案2
BOM 在 UTF-8 中没有意义。这些通常是由 Microsoft 操作系统上的虚假软件错误添加的。
dos2unix
将删除它并处理 Windows 文本文件的其他特性。
dos2unix test.xml
答案3
使用VIM
在 VIM 中打开文件:
vi text.xml
删除BOM编码:
:set nobomb
保存文件并退出:
:x
对于非交互式解决方案,请尝试以下命令行:
vi -c ":set nobomb" -c ":wq" text.xml
这应该删除 BOM、保存文件并退出,所有这些都通过命令行进行。
答案4
为此,我经常使用 vim 单行代码:
vim --clean -c 'se nobomb|wq' filename
vim --clean -c 'bufdo se nobomb|wqa' filename1 filename2 ...