如何使用 grep 和 glob 在文件目录中查找字符串?
How to Find a String in a Directory of Files Using grep and glob?
所以在过去一个半小时左右的时间里,我一直在处理这个问题,只是不知道该怎么做。
在我的 Ruby test.rake 文件中,在创建快照 Gem 后从另一个项目调用该文件,我需要检查 Capybara 的依赖项是否存在于另一个项目的 Rakefile,因为我们已经弃用了 Capybara 并将其替换为其他项目。
所以,我做了一个简单的检查,看看项目是否包含 Feature/Capybara 测试,如果是,扫描每个规范测试,看看它是否依赖于 Capybara,如果是,记录警告用户 Capybara 已被弃用。
我的问题是,我根本无法让它工作。当我将其附加到 Jenkins 作业并 运行 它时,我不断在 else 子句中收到意外的 Print 语句。
我是不是漏掉了什么?据我了解,我的代码正在执行以下操作:
- 检查 spec/features 目录是否存在
- 使用 glob select 目录中以 .rb 结尾的所有文件(规范测试),每个文件实例都被分配给 file
- 获取 file 的当前实例,读取它的每一行,并使用 grep 查找其中单词 "capybara" 的任何实例,并打印出找到就留言吧。
- 否则,如果找不到该词,则在 else 子句中打印错误消息。
我对 Ruby 有点陌生,所以我觉得我可能在语法上遗漏了一些东西,但除此之外我很困惑!任何帮助将不胜感激!这是我试图解析的代码和 Rakefile 的样子:
test.rake:
if Dir.exist?('spec/features')
path = 'spec/features/'
Dir.glob(path + '*.rb') {|file|
if File.readlines(file).grep(/capybara/).any?
print "The capybara dependency has been found!"
else
print "SOMETHING WENT WRONG"
end
}
end
Rakefile:
#!/usr/bin/env rake
# frozen_string_literal: true
require 'roll_out/rake_tasks'
require 'roll_out/security'
require 'roll_out/jira'
require 'REDACTED/philter/lint_results'
require 'roll_out/capybara'
load 'REDACTED/tasks/REDACTED.rake'
除了 .each 缺失之外,您的代码看起来几乎不错
我做了测试,效果很好。
Dir.glob('spec/features/*.rb').each do |f|
puts 'haha' if File.readlines(f).any?{|line| line.include?('capybara')}
end
所以在过去一个半小时左右的时间里,我一直在处理这个问题,只是不知道该怎么做。
在我的 Ruby test.rake 文件中,在创建快照 Gem 后从另一个项目调用该文件,我需要检查 Capybara 的依赖项是否存在于另一个项目的 Rakefile,因为我们已经弃用了 Capybara 并将其替换为其他项目。
所以,我做了一个简单的检查,看看项目是否包含 Feature/Capybara 测试,如果是,扫描每个规范测试,看看它是否依赖于 Capybara,如果是,记录警告用户 Capybara 已被弃用。
我的问题是,我根本无法让它工作。当我将其附加到 Jenkins 作业并 运行 它时,我不断在 else 子句中收到意外的 Print 语句。
我是不是漏掉了什么?据我了解,我的代码正在执行以下操作:
- 检查 spec/features 目录是否存在
- 使用 glob select 目录中以 .rb 结尾的所有文件(规范测试),每个文件实例都被分配给 file
- 获取 file 的当前实例,读取它的每一行,并使用 grep 查找其中单词 "capybara" 的任何实例,并打印出找到就留言吧。
- 否则,如果找不到该词,则在 else 子句中打印错误消息。
我对 Ruby 有点陌生,所以我觉得我可能在语法上遗漏了一些东西,但除此之外我很困惑!任何帮助将不胜感激!这是我试图解析的代码和 Rakefile 的样子:
test.rake:
if Dir.exist?('spec/features')
path = 'spec/features/'
Dir.glob(path + '*.rb') {|file|
if File.readlines(file).grep(/capybara/).any?
print "The capybara dependency has been found!"
else
print "SOMETHING WENT WRONG"
end
}
end
Rakefile:
#!/usr/bin/env rake
# frozen_string_literal: true
require 'roll_out/rake_tasks'
require 'roll_out/security'
require 'roll_out/jira'
require 'REDACTED/philter/lint_results'
require 'roll_out/capybara'
load 'REDACTED/tasks/REDACTED.rake'
除了 .each 缺失之外,您的代码看起来几乎不错
我做了测试,效果很好。
Dir.glob('spec/features/*.rb').each do |f|
puts 'haha' if File.readlines(f).any?{|line| line.include?('capybara')}
end