Kodama's home / tips.
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.