grep

ファイル処理と正規表現と組み合わせてgrepを作るというのをやってみようかと。ファイル処理と正規表現の合わせ技は個人的にもよく使うし。

いやgrepだとコマンド引数から正規表現を作らないといけないかも。

テキストファイルの中からキーワードを探す。

fname = "a.txt"
File.readlines(fname).each do |line|
  if line =~ /hello/
    puts line
  end
end

もう少しちゃんと書くとこんな感じ。これは難しすぎるけど。

pattern = ARGV.shift
while gets
  print if /#{pattern}/
end

参考: http://www.lab.ime.cmc.osaka-u.ac.jp/~kiyo/pub/lecture/unixpro/ruby/#feature

grepと言っちゃうと誤解がありそうなので、キーワードを探すと言った方がいいかな。だったら正規表現を使わずにString#include?でいいか。そうするとファイルの章を正規表現の前に置ける。正規表現はちょっとややこしいから、極限まで後ろに置きたい。

正規表現のところでここで使ったサンプルを改造すればいいかも。

String#include?を使ったキーワードを探す

このほうがシンプル。これを正規表現を使ったものにステップアップするのもよい流れだと思う。

fname = "a.txt"
File.readlines(fname).each do |line|
  if line.include?("hello")
    puts line
  end
end

案→ボツ

UNIXにはgrepというコマンドがあります。grepコマンドはテキストファイルの中から、任意のパターンにマッチする行を探し出すコマンドです。

Linux等のUNIX系のOSを使っている方はgrepコマンドを実行できるはずです。grepコマンドは次のようにして使います。

grep def test.rb

defという文字列をファイルtest.rbの中から検索します。ファイルの中にdefという文字列があると、その行を表示します。