kiyoka.2008_06_16 RSSPLAIN

Related pages: !kiyoka.blog.list !kiyoka.blog.2008_06 OldType.会議室.2008年.1
55555453333333332222222222222111222222222222200
5

[プログラミング] 文字コードを自動認識するgrepが欲しい

5

LVEXTというフリーソフトウェアに複数の日本語エンコードを自動認識するlgrepというプログラムが付属している。

5

が、-r ( --recursive ) オプションをサポートしていない。

5

zshの "**/*.java" 形式のワイルドカードを使えば -r を代用できるが、展開後のファイル数が爆発すると問題が発生する。

5
 (1行の長さ制限に捕まると、エラーが出てgrepの実行前に止められる)
4

Gaucheでgrepを書いてみようかなとも思うが、そこまでするほどでも無い気がするんだよな。

5

こういうのを許容時間内に書けるスキルが必要だなーと思う今日この頃。

3

 

3

 

3
ktatさんからコメントをもらったので、追記。
3
 lgrep ですが、 find -print0 -type f | xargs -0 lgrep 'hoge' とかどうでしょうか。
3

いつもこのコマンドで実行しています。何回もコマンドを打ちこみ直すのが大変なんです。

3
 alias lgrep='find -print0 -type f | xargs -0 lgrep ' とか。パス渡せませんが。
3

そうか。aliasか...

3

このアドバイスでbashのfunctionを使えば実現できそうな気がしてきたぞ。

3

うまくいったらまた記事を書きます。

2

 

2

 

2
ktatさんのコメントをヒントにスクリプトを作ったので追記。
2

結局このスクリプトで運用開始した。この程度で十分使えることが判明した。

2
lgrep-rのソースコード
2
#!/bin/bash
2
2
if [ "" = "$1" ] ; then
2
  echo "usage 'lgrep-r [pattern]'"
2
  exit 1
2
fi
2
find . -print0 -type f | grep -z -Z -v '.svn' | xargs -0 lgrep -n $1
2

 

1

出力をUTF-8に揃えたい場合は、最後の行を次の様に変更すればOK。

1
find . -print0 -type f | grep -z -Z -v '.svn' | xargs -0 lgrep -Ou8 -n $1
1

 

2
lgrep-rの動作
2
カレントディレクトリから再帰的に '日本語検索パターン' でgrepする。
2
ファイルの日本語コードは自動判別する
2
Subversionの管理ディレクトリ.svnは除外する
2
grepの結果には行番号も含む ( grep -r '日本語' * の結果に合わせてある )
2

 

2
使いかた
2
コンソールから
2
lgrep-r '日本語検索パターン'
2

 

2
Emacsから
2

カスタマイズ変数grep-commandを '/usr/local/bin/lgrep-r 'に設定しておけば

2

M-x grep で日本語エンコードを自動認識したgrepが使える。

0

 

0

DCOMMENTPost a comment
Name: