shell utf 8ファイルのbomヘッダを除去する方法

2810 ワード

shellコマンドを使用してutf 8ファイルのbomヘッダを一括除去する方法について説明します.utf 8のbomヘッダはxEF,xBB,xBFで構成されており、bom付きのファイルは使用中、一部のソフトウェアが開くと文字化けしなどの異常が発生するが、ファイルをutf 8なしに再保存するのは面倒なのでshellコマンドを直接使用すると便利である.
1.utf 8ファイルのbomヘッダを除去する
まずutf 8のbomヘッダ付きファイルを作成し、test.txtなどの内容を勝手に挿入します.
コマンドxxdを使用して、このファイルの16進符号化を表示します.
xxd test.txt
00000000: efbb bfe6 b58b e8af 95e6 9687 e4bb b60a  ................

最初の3バイトの16進数がxEFxBBxBFであることがわかりますshellのsedコマンドを使用してutf 8 bomヘッダ除去を実現できます
sed -i 's/^\xEF\xBB\xBF//g' test.txt

上のコマンドは、xEFxBBxBFの先頭の文字を空に置き換えます.
実行が完了したらxxdコマンドを使用してファイル16進符号化を表示
xxd test.txt
00000000: e6b5 8be8 af95 e696 87e4 bbb6 0a         .............

utf 8 bomヘッドが除去されているのが見えます.
2.フォルダのutf 8ファイルのbomヘッダを一括削除
grepを使用して、bomヘッダが存在するファイルを表示し、これらのファイルを置換することができます.
grep -r -i -l $'^\xEF\xBB\xBF' . | xargs sed -i 's/^\xEF\xBB\xBF//g'

-r現在のディレクトリとそのサブディレクトリの下で検索-iは大文字と小文字の違いを無視するため、大文字と小文字は同じとみなされます-lマルチファイルをクエリーするときに一致する文字を含むファイル名のみが出力されます  再帰的な多層ディレクトリが不要な場合は、現在のディレクトリのみを処理します.
grep -i -l $'^\xEF\xBB\xBF' * | xargs sed -i 's/^\xEF\xBB\xBF//g'

注意:macのsedコマンドは若干異なりますのでgnu-sedをインストールして処理することをお勧めします
gnu-sedのインストール
brew install gnu-sed

デフォルトのパスの設定
export PATH   /usr/local/opt/gnu-sed/libexec/gnubin: