文字コードを一時的に変換してgrepする方法 nkfコマンド

日本語をキーワードにgrepしてファイルを探していたら
絶対にキーワードを含んでるのにヒットしないファイルがあった。
  
あれーなんでかなーと思ってファイルを開いてみたら文字化けの嵐!あれまー
デフォルト文字コードとそのファイルの文字コードが違ったのね。
だからgrepでは同じキーワードであると判別出来なかったみたい。なるほど
  
なので、

  1. 新たなファイルを生成せずに
  2. ファイルの文字コードを一時的に変換してデフォルトのモジコードと合わせて
  3. grepする

方法を探してみた!
  

nkfコマンド

このコマンドは文字コードを変換するときに使われるコマンドで
出力先を指定すれば文字コードを変換したファイルが生成できちゃったりする。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230849/?ST=oss
  
今回はファイルに出力する必要はないので、パイプでつないでgrepに渡してみた。
あと文字コードはデフォルトがUTF8でファイルがshift-JISだったので、
ファイルをUTF8に変換することにした。

$ grep -r `echo "こんにちは" | nkf -s` . | nkf -w | grep --color "こんにちは"

左から説明していくと

  1. 「こんにちは」という文字列をshift-JISで変換し、それをキーワードにカレントディレクトリ内を再帰的にgrep
  2. grepした結果を引数に、その全てをUTF8に変換
  3. 変換した結果を色つきでもう一度grepしてキーワードを目立たせる

オッケー☆ちゃんと動いてる動いてる(*´ڡ`●)
UTF8に変換してキーワードを探してみたい文字コード分、
こんにちはとパイプでつないでいる方のnkfコマンドのオプションを変更して実行すればOK♪
  
あと、.zshrcでgrepにaliasを設定しておくと便利♡

alias grep="grep -a --color"

これをかいておくだけで
grepを使うときにいちいちオプションを設定しなくても
キーワードの色付けとバイナリファイルをテキストファイルのように処理することが
できるようになるのだ!色付けホント便利よ!
  
またひとつお勉強になりましたとさっ