如何在Ruby中仅显示匹配的部分(模仿" -o, - 仅匹配" grep选项)?

时间:2016-05-04 10:44:02

标签: ruby regex grep

Unix grep 有一个简单的-o, --only-matching选项,只显示与PATTERN匹配的匹配行的部分。

使用grep方法或任何其他标准方法(不使用exec或gems)模拟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。 我想有更好的(更清洁,更简洁)的方式。

2 个答案:

答案 0 :(得分:1)

利用@ avinash-raj,我最终得到了这个:

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

对于不占用太多内存空间的文件来说,这似乎是一件好事。

仍然对其他解决方案持开放态度。

答案 1 :(得分:0)

使用String#scan获取所有匹配项的数组:

File.foreach('test.css') do |line|
  line.scan(/p[A-Z]+/).each do |match|
    puts match
  end
end