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は改行しない事を意味している。