2016-05-04 9 views
0

Unix grepには、一致する行のPATTERNに一致する部分だけを表示するという簡単な-o, --only-matchingオプションがあります。Rubyで( "-o、--only-matching" grepオプションを模倣して)一致する部分だけを表示するには?

grepメソッドまたは他の標準的な方法(execまたはgemなし)を使用して、Rubyの動作を模倣する最も簡単な方法は何ですか?与えられた

例:

File.open('test.css','r') do |file| 
    file.each_line do |line| 
    match=/p[A-Z]+/.match(line) 
    puts match.to_s unless match.nil? 
    end 
end 

grep -oE "p[A-Z]+" test.cssを模倣します。 私は、より良い(よりきれいで簡潔な)方法があると思います。 @のAvinash-ラジを活かし

+1

使用 'str.scan' ..、' str.scanを ' –

答えて

1

、私はこれで終わった:

puts File.open('test.css','r'){|f| f.read.scan(/p[A-Z]+/)} 

は、それはあまりにも多くのメモリ空間を占有していないファイルに対して良い取引です。

他のソリューションにはまだオープンしています。

0

使用String#scanすべてのマッチの配列を取得する:

File.foreach('test.css') do |line| 
    line.scan(/p[A-Z]+/).each do |match| 
    puts match 
    end 
end 
(/ P [A-Z] + /)
関連する問題