文字コードを一時的に変換してgrepする方法 nkfコマンド
日本語をキーワードにgrepしてファイルを探していたら
絶対にキーワードを含んでるのにヒットしないファイルがあった。
あれーなんでかなーと思ってファイルを開いてみたら文字化けの嵐!あれまー
デフォルト文字コードとそのファイルの文字コードが違ったのね。
だから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 "こんにちは"
左から説明していくと
- 「こんにちは」という文字列をshift-JISで変換し、それをキーワードにカレントディレクトリ内を再帰的にgrep
- grepした結果を引数に、その全てをUTF8に変換
- 変換した結果を色つきでもう一度grepしてキーワードを目立たせる
オッケー☆ちゃんと動いてる動いてる(*´ڡ`●)
UTF8に変換してキーワードを探してみたい文字コード分、
こんにちはとパイプでつないでいる方のnkfコマンドのオプションを変更して実行すればOK♪
あと、.zshrcでgrepにaliasを設定しておくと便利♡
alias grep="grep -a --color"
これをかいておくだけで
grepを使うときにいちいちオプションを設定しなくても
キーワードの色付けとバイナリファイルをテキストファイルのように処理することが
できるようになるのだ!色付けホント便利よ!
またひとつお勉強になりましたとさっ