BOM付きだと思われるファイルを grep したいのですが、うまくいきません。ruby 1.8.7 の正規表現もうまくできません。どうするといいのでしょうか?

下記に、hexdump の結果を載せています。最初のが普通のファイル、次がBOM付きっぽいファイルです。
やりたいことは対象ファイル内の数字 (例)width="1000" を width="800" のように変換して戻したいのです。対応している sed などがあるとうまくいくのでしょうか? OS は、CentOS release 5.5 です。

$ hexdump -C temp.1
00000000 6e 65 6b 6f 0a |neko.|
00000005
$ hexdump -C temp.2
00000000 ff fe 6e 00 65 00 6b 00 6f 00 0d 00 0a 00 |..n.e.k.o.....|
0000000e
再編集

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/10/03 14:39:52
  • 終了:2010/10/10 14:40:02

回答(2件)

id:Galapagos No.1

Galapagos回答回数963ベストアンサー獲得回数892010/10/03 16:28:10

ポイント35pt

nkfコマンドを使ってBOM無しに変換した後、grepにパイプしてやるのがいいでしょう。


nkf -w ファイル名 | grep

id:fenstrial No.2

fenstrial回答回数57ベストアンサー獲得回数142010/10/04 12:48:45

ポイント35pt

BOM付きが問題なのではなく、そのファイルがUTF-16であることが原因だと思います。


本来、環境の文字コード(LANG環境変数を参照)と異なる文字コードのテキストの場合、環境の文字コードに変換してから使用しなければなりません。


コマンドラインではnkfをパイプで使用し、rubyではkconvを用います。

http://www.ruby-lang.org/ja/man/html/Kconv.html

http://lab.urume.net/2005,1215,152.html


多くの文字コードはASCII文字はASCIIと同じコードになるため、ASCII(またはASCIIと互換性のあるコード)とみなして処理を行うことができる場合もあります。(UTF-8,EUC-JPなど。Shift-JISは文字化けの原因になります。)

UTF-16では、ASCIIの文字であってもASCIIとは異なるコードになるため、ASCIIとみなして処理を行うことができなのです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません