質問
どのような awk
スクリプトと思われるワーライナー)削除 BOM 音も聞こえてきます。
仕様:
- 印刷毎ライン後、最初の(
NR > 1
) - 第一線:場合、その
#FE #FF
または#FF #FE
, を取り除く、印刷を
解決
してみてください:
awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}{print}' INFILE > OUTFILE
最初のレコード(行)と、削除にBOM付き文字です。印刷毎します。
または少し短い方の知識とデフォルトのアクションにawkプの記録:
awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}1' INFILE > OUTFILE
1
の短い状態で必ず評価しtrue、各レコードが印刷されます。
楽しめます!
--ADDENDUM--
Unicodeのバイト順マーク(BOM)FAQ 以下のテーブルの正確なBOMバイト毎のエンコード:
Bytes | Encoding Form
--------------------------------------
00 00 FE FF | UTF-32, big-endian
FF FE 00 00 | UTF-32, little-endian
FE FF | UTF-16, big-endian
FF FE | UTF-16, little-endian
EF BB BF | UTF-8
このように、できるか \xef\xbb\xbf
に対応する EF BB BF
UTF-8
BOMからのバイトおり、の項に計上しています。
他のヒント
(LinuxやCygwinの上)のGNU sed
を使用します:
# Removing BOM from all text files in current directory:
sed -i '1 s/^\xef\xbb\xbf//' *.txt
FreeBSDでます:
sed -i .bak '1 s/^\xef\xbb\xbf//' *.txt
GNUやFreeBSD sed
を使用する利点:。-i
パラメータは「場所に」を意味し、リダイレクトや奇妙なトリックを必要とせずにファイルを更新します。
Macの場合:
別の答えでこのawk
液がに動作しますが、上記のsed
コマンドが動作しません。マック(シエラ)sed
のドキュメントに少なくともALA \xef
をエスケープ進数をサポート言及していない。
同様のトリックは moreutilsするからsponge
ツールに配管任意のプログラムを用いて達成することができます。
awk '…' INFILE | sponge INFILE
未awkのが、単純ます:
tail -c +4 UTF8 > UTF8.nobom
BOMを確認するには:
hd -n 3 UTF8
BOMが存在している場合は、表示されます:00000000 ef bb bf ...
LFにCRLFの改行を変換することに加えて、dos2unix
はまた、部品表を削除します:
dos2unix *.txt
dos2unix
もBOMなしUTF-8(BOMなしではなく、UTF-16ファイル)BOMを持つUTF-16ファイルを変換
$ printf '\ufeffä\n'|iconv -f utf-8 -t utf-16be>bom-utf16be
$ printf '\ufeffä\n'|iconv -f utf-8 -t utf-16le>bom-utf16le
$ printf '\ufeffä\n'>bom-utf8
$ printf 'ä\n'|iconv -f utf-8 -t utf-16be>utf16be
$ printf 'ä\n'|iconv -f utf-8 -t utf-16le>utf16le
$ printf 'ä\n'>utf8
$ for f in *;do printf '%11s %s\n' $f $(xxd -p $f);done
bom-utf16be feff00e4000a
bom-utf16le fffee4000a00
bom-utf8 efbbbfc3a40a
utf16be 00e4000a
utf16le e4000a00
utf8 c3a40a
$ dos2unix -q *
$ for f in *;do printf '%11s %s\n' $f $(xxd -p $f);done
bom-utf16be c3a40a
bom-utf16le c3a40a
bom-utf8 c3a40a
utf16be 00e4000a
utf16le e4000a00
utf8 c3a40a
私は質問は、UNIX / Linuxのに向けた知っている、(UIで、Windowsの場合)UNIX-挑戦のための良いオプションを言及する価値があるだろうと思いました。
私は(BOMは、RSSフィードやページの検証で問題を引き起こしていた)WordPressのプロジェクトで同じ問題に走ったと私はBOMとあったものを見つけることは非常に大きなディレクトリツリー内のすべてのファイルの中に見ていました。 と呼ばれるアプリケーションパイオニアとそれにを置き換えを見つけます:
バッチランナー - >検索(サブフォルダ内のすべてのファイルを見つけるために) - >テンプレートの置き換え - >バイナリ(既製検索があると、このためのテンプレートを置き換える)BOMを削除します。
これは、最もエレガントなソリューションではありませんでしたし、それが欠点であるプログラムを、インストールする必要がなかったです。私は私の周りに何が起こっていたかが分かったら、しかし、それは魅力のように働いていた(とBOMとしたおよそ2300のうち3つのファイルを見つけました)。