質問

どのような 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つのファイルを見つけました)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top