【ワンライナー】セルフgrep【改行対応】

MISSION: リリース間近の大規模プログラムに作為的バグが混入しているとの報告があった。わたしは、30分以内に何百万というファイル群から「@^-^@」という文字列が含まれたXMLファイルを探し出さなれけばならない。しかも、途中で改行されて

 @^
 -^@

いたり、インデントによって

 @
   ^
     -
       ^
         @

となっている箇所もあるようだ。
それらも含めて調査する必要がある。


だが、優秀なテキストエディタは全てクラッシュし、ネットワークなど皆無。その上、初めて使うOSで端末のコマンドがわからない。そして、自分は普通のプログラマである・・。それなら、Rubyだ!

ruby -e "Dir.glob('**/*.xml'){|fn|next unless File.file?(fn);File.open(fn){|f|puts File.expand_path(fn) if /@\^-\^@/ =~ f.read.gsub(/\s+/,'')}}"
# other (better)
Dir.glob('**/*.xml').each do |file_name|
  next unless File.file?(file_name)
  File.open(file_name) {|f|
    file_content = f.read.gsub(/\s+/,'')
    if /@\^-\^@/.match(file_content)
      puts File.expand_path(file_name)
    end
  }
end



■参考
Ruby 1.8.7 リファレンスマニュアル
http://doc.okkez.net/static/187/class/Dir.html
http://doc.okkez.net/static/187/class/File.html
http://doc.okkez.net/static/187/class/String.html
http://doc.okkez.net/static/187/doc/spec=2fregexp.html