Kodama's home / tips.

日本語に grep をかける(grep スクリプト試作)

grep とは書いたが, 行毎に処理するスクリプトの母型として考えると良い.

JIS で置いている mail を日本語で検索しようとすると, LINUX の漢字コ−ドを EUC にしているので, ちょっと戸惑ってしまう. jgrep を使えば良さそうだが,自作スクリプトで処理しよう.

以下のスクリプトは, mail を EUC に変換しながら grep をかける. nkf で変換しながらなので ちょっと(かなり?)遅い.

#!/bin/sh 
PAT=$1;shift
for i in $@;do nkf -em $i | sed -ne '/'"$PAT"'/s/^/'"$i"': /p'; done

ruby の方が効率が良い. イテレ−タ−って便利. 一行読む事に処理している.

#!/usr/local/bin/ruby 
# jgrep.rb
# Usage: %0 pattern files
require 'kconv'
pat=/#{Kconv::toeuc(ARGV.shift)}/e
ARGV.each{|fname|
  IO.foreach(fname){|line|
    line=Kconv::toeuc(line); if pat =~ line; print fname,": ",line; end
  }
}

テキスト全体を標準入力から読み込んで,後から処理する. メモリに余裕があればこの方が改造しやすい.

#!/usr/local/bin/ruby 
# Usage: %0 pattern < file
pat=/#{Kconv::toeuc(ARGV.shift)}/e
lines=STDIN.readlines;
lines.each{|l|
  l=Kconv::toeuc(l); if pat =~ l; print l; end
}

Kodama's home / tips.