UTF-8のBOMの削除、追加方法その2

nkfを使用したBOMの削除、追加の方法を以前投稿していたがそれ以外の方法がないかをChatGPTやAI shellを使って調べた件をまとめた。

BOMの削除

Ⅰ行目の先頭にあるBOMのコードEE BB BFを検索し、置換文字列を指定しないで置換する(削除する)。

コマンド出力をリダイレクト

ファイルinput.txtのBOMを削除し、その内容をファイルoutput.txtに書き出す。

sedコマンド、awkコマンドを使って実現できる。

sed '1s/^\xEF\xBB\xBF//' input.txt > output.txt
  • 1sの1はⅠ行目を意味する。
  • \xNNで16進コードNNを意味する。
awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}1' input.txt > output.txt

バックアップファイルを作成する

sedコマンドのオプションiで引数に指定したファイルに拡張.bakを追加して保存し、BOMを削除した内容を引数で指定したフィルに保存する。

sed -i.bak '1s/^\xEF\xBB\xBF//' input.txt

BOMの追加

BOMのコードをⅠ行目に追加できればよい。

シェルの組み込みコマンドprintfやechoを使って実現できる。

printf '\xEF\xBB\xBF' | cat - input.txt > output.txt

BOMコードEFBBBFを標準出力に出力し、パイプでcatコマンドに渡し、標準出力とファイルinput.txtの内容を標準出力に出力し、ファイルoutput.txtへリダイレクトする。

  • catコマンドの-は標準出力を意味する。
(echo -n '\xEF\xBB\xBF'; cat input.txt) > output.txt
  • echoコマンドのオプションnは改行しない事を意味している。

コメントする

This site uses Akismet to reduce spam. Learn how your comment data is processed.