脚本中的Ruby变量

时间:2014-10-12 01:26:36

标签: ruby regex string

这似乎正常工作并显示我想要的结果

Dir["/Users/ondrovic/RubyTest/**/*.txt"].each do |i|
    puts i.green if File.readlines(i).grep(/test/).any?
end

为什么当我尝试这样做时,它不会填充信息

print "Enter search dir"
src = gets
print "Enter search term"
trm = gets

puts "Looking in #{src} for #{trm}"

Dir["#{src}/**/*.txt"].each do |i|
    puts i.green if File.readlines(i).grep(/"#{trm}"/).any?
end

我也尝试过这种方式

Dir[src + "/**/*.txt"].each do |i|
   puts i.green if File.readlines(i).grep(/ + trm + /).any?
end

工作代码

require 'colorize'
print "Enter search dir\n".green
src = gets.chomp
print "Enter search term\n".blue
trm = gets.chomp

puts "Looking in #{src} for #{trm}"

Dir["#{src}/**/*.txt"].each do |i|
    puts i.green if File.readlines(i).grep(/#{trm}/).any?
end

1 个答案:

答案 0 :(得分:2)

gets的返回值包括尾随换行符:

>> gets
asdf
=> "asdf\n"  # <----
>>

使用String#chomp删除它:

print "Enter search dir"
src = gets.chomp
print "Enter search term"
trm = gets.chomp
...

除此之外,模式/"#{trm}"/包括"。删除它们:

/#{trm}/

或者,您可以使用Regexp::new

Regexp.new(trm)