標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

うっかり、オレオレ grep (seek)を書いてしまった。

先日、while( <> ){ } 的なものの Go 版ライブラリ argfを書いてみたわけだけれども、そのサンプルとして 簡単な grep (seek)を書いてみた。

最初は必要最小限にしていたんだけど、jvgrep みたいに「検索文字列の部分をハイライト表示」できないかなと思って頑張ってみたら、Go言語のライブラリが充実していることもあって、案外簡単に出来てしまった。

で、調子にのって、自分が grep に望む機能を実装してみた。

  • UTF8 と ANSI(現在のコードページマルチバイト文字列:日本なら SJIS~CP932)の行単位での簡易自動判定
    • UTF8 と解釈できなければ、ANSI と判断するという安直判定
    • 前は ShiftJIS の時は Windows 標準の findstr.exe、UTF8 なら jvgrep を使っていたが、いちいち使い分けるのは面倒くさかった。
    • jvgrep はテキストファイルチェックが厳しくて、すぐバイナリファイル扱いにしてしまう。
    • git で SJIS テキストの差分を見る時、git の UTF8 と、本文の SJIS が混ざってしまう。両方とも化けずに見たい場合があるので、行単位で別々の文字コード判定にしたかった。

本当に自分が必要とした機能しか入れていないので、以下のような制限がある

  • オプションは -i (大文字・小文字を区別しない)、-r再帰的にファイルを検索する)だけ
  • 速度はあまり重視しておらず、工夫なし
  • 常にカラー表示。「リダイレクトしていたらエスケープシーケンスを抑制」とか別にしない
  • 色使いは jvgrepパクリ 互換

貴殿も、オレオレ grep を作ってみませんか?