我需要搜索以.feature
结尾的文件(POST
,GET
,PUT
和DELETE
)。我已经能够隔离.feature
个文件,但我找不到具有上述字词的文件。
我使用以下内容显示.feature
个文件:
featureLocation = puts Dir.glob "**/*.feature" # show all feature files
puts featureLocation
我尝试了很多方法来遍历每个文件来查找单词,但还没有运气。
答案 0 :(得分:0)
files = Dir.glob('**/*.feature')
files.each do |name|
if File.read(name).include?('CERTAIN WORD')
# DO SOMETHING WITH THE FAILE
end
end
您可以更改此内容(阅读,替换,保存新内容):
content = File.read(name)
new_content = content.gsub(/SOME PATTERN/, 'REPLACEMENT')
File.open(name, 'w') { |file| file << new_content }
答案 1 :(得分:0)
有多种方法可以做到这一点。这是未经测试的,但这是我如何去做的主旨:
require 'find'
REPLACEMENTS = {
'target1' => 'replacement1',
'target2' => 'replacement2'
}
Find.find('./somedir') do |path|
next if File.directory?(path)
next unless File.extname(path) == '.feature'
new_path = path + '.new'
File.open(new_path, 'w') do |fo|
File.foreach(path) do |line|
REPLACEMENTS.each do |t, r|
line.gsub!(t, r)
end
fo.puts line
end
end
old_path = path + '.old'
File.rename(path, old_path)
File.rename(new_path, path)
# File.unlink(old_path)
end
在企业中编写生产代码时,我认为有几件事情很重要:
File.foreach
逐行读取文件,许多人认为这意味着它运行速度较慢或涉及更多工作。测试文件I / O,特别是slurping files vs. line-by-line表明随着文件大小的增加,read
(AKA slurping)会大幅减慢。除非你完全确定,你的文件永远不会超过1MB,使用foreach
。gsub
and regular expressions作为哈希中的键是一个很好的组合。这里有很多答案显示如何做,加上文档有例子。Find.find
并不为人所知;人们倾向于跳到Dir[...]
或Dir.glob
,但我更喜欢Find。该文档有一个很好的例子,说明如何使用它。查找似乎更好地扩展,特别是当你必须走大目录时。open
块的副产品)。然后重命名旧文件,将新文件重命名为旧文件的名称。如果发生故障,就会留下备份。然后,您可以选择删除旧文件。这导致非常低的开销,运行速度非常快,并且可以很好地扩展/增长。
使用* nix中的命令行工具find
和sed
也可以轻松完成此任务,并且它可以非常快速地运行并且具有极高的可扩展性,因此它可以很快完成。很高兴研究这条路径,因为令人惊讶的是,在提示符或shell脚本中可以轻松完成某些文件任务。