我有一个大约有100多个条目的文本文件,例如out.txt:
domain\1esrt
domain\2345p
yrtfj
tkpdp
....
....
我必须逐行读取out.txt并检查“domain \ 1esrt”之类的字符串是否存在于不同目录下的任何文件中。如果存在,则仅删除该字符串,并保存文件。
我知道如何逐行读取文件,并且知道如何在目录中的多个文件中grep一个字符串,但我不知道如何加入这两个文件以达到我的上述要求。
答案 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
我不知道它如何使用更大的文件,无论如何,我希望它有所帮助。