如何读取文件的内容并在多个文件中搜索字符串

时间:2017-05-10 14:59:46

标签: ruby

我有一个大约有100多个条目的文本文件,例如out.txt:

domain\1esrt
domain\2345p
yrtfj
tkpdp
....
....

我必须逐行读取out.txt并检查“domain \ 1esrt”之类的字符串是否存在于不同目录下的任何文件中。如果存在,则仅删除该字符串,并保存文件。

我知道如何逐行读取文件,并且知道如何在目录中的多个文件中grep一个字符串,但我不知道如何加入这两个文件以达到我的上述要求。

2 个答案:

答案 0 :(得分:1)

我建议在这里使用gsub。它将对字符串运行正则表达式搜索并将其替换为第二个参数。因此,如果您只需要替换任何单个字符串,我相信您只需在该字符串上运行gsub(包括换行符)并将其替换为空字符串:

new_file_text = text.gsub(/regex_string\n/, "")

答案 1 :(得分:1)

您可以创建一个包含您要查找的所有单词或字符串的数组,然后删除/替换:

strings_to_delete = ['aaa', 'domain\1esrt', 'delete_me']

然后阅读文件并使用map创建一个数组,其中所有行都不匹配之前创建的数组中的所有元素:

# read the file 'text.txt'
lines = File.open('text.txt', 'r').map do|line|
  # unless the line matches with some value on the strings_to_delete array
  line unless strings_to_delete.any? do |word| 
    word == line.strip 
  end
  # then remove the nil elements
end.reject(&:nil?)

然后再次打开文件,但这一次写在上面,所有的行都与strings_to_delete数组中的值不匹配:

File.open('text.txt', 'w') do |line|
  lines.each do |element|
    line.write element
  end
end

txt文件如下所示:

aaa
domain\1esrt
domain\2345p
yrtfj
tkpdp
....
....
delete_me

我不知道它如何使用更大的文件,无论如何,我希望它有所帮助。