查找字符串并删除这些行

时间:2017-11-20 10:40:27

标签: ruby regex

我试图从目录中读取所有文本文件,遍历每个文件,并在文件中搜索字符串并删除这些行。例如,

sample.txt的

#Wrote for the configuration ideas

mag = some , db\m09oi, id\polki
jio = red\po9i8

[\]

@mag = denk
@jio = tea

我想删除有mag的行。

输出

#Wrote for the configuration ideas

jio = red\po9i8

[\]

@jio = tea

我试过了:

Dir.glob("D:\\my_folder\\*.txt") do |file_name|

  value = File.read(file_name)
  change = value.gsub!(/[@m]ag/, "")
  File.open(file_name, "w") { |file| file.puts change }

end

但是线条没有被删除。

请提出任何建议。

1 个答案:

答案 0 :(得分:2)

  

最好逐行读取文件,如果一行包含mag,只需省略它,只将其他行写入新文件。    - 致@WiktorStribiżew的信用

File.write(file_name, File.readlines(file_name).reject do |line|
                        line[/\bmag\b/]
                      end.join($/))

在这里,我们阅读文件,按IO#readlines分割,拒绝mag作为单个字内的行("magistrate"将不匹配),将其与为此特定平台指定的行分隔符(例如,在unix上为\n)并将其写回。