BOMを使用したUTF-8エンコードのファイルがあり、BOMを削除したい。ファイルからBOMを削除するLinuxコマンドラインツールはありますか?
$ 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エンコードは、3つの16進値0xEF、0xBB、0xBFで構成されています。
Bashを使用すると、Unicodeエスケープを実装する特別な引用形式_$''
_を使用してUTF-8 BOMを作成できます:_$'\uFEFF'
_。 bashを使用する場合、テキストファイルの先頭からUTF-8 BOMを削除する信頼できる方法は次のとおりです。
_sed -i $'1s/^\uFEFF//' file.txt
_
これにより、ファイルがUTF-8 BOMで始まっていない場合は変更されずに残り、そうでない場合はBOMが削除されます。
他のシェルを使用している場合、"$(printf '\ufeff')"
がBOM文字を生成することに気付くかもしれません(zsh
組み込みのprintf
のないシェルと同様に、_/usr/bin/printf
_はGnuバージョン)ですが、Posix互換バージョンが必要な場合は次を使用できます。
_sed "$(printf '1s/^\357\273\277//)" file.txt
_
(_-i
_インプレース編集フラグもGnu拡張です。このバージョンは、変更された可能性のあるファイルをstdoutに書き込みます。)
VIMでファイルを開く:
vi text.xml
BOMエンコーディングを削除します。
:set nobomb
保存して終了:
:wq
tail
コマンドを使用して、ファイルからBOMを削除することができます。
tail --bytes=+4 withBOM.txt > withoutBOM.txt
さて、今日これに対処しましたが、私の好ましい方法はdos2unixでした。
dos2unixは、BOMを削除し、他のSOからの他の特異性も処理します。
$ Sudo apt install dos2unix
$ dos2unix test.xml
BOMのみを削除することもできます(-r、-remove-bom):
$ dos2unix -r test.xml
注: dos2unix 7.3.4でテスト済み