如何使用 Ruby 搜索和替换目录中所有文件中的字符串



基本上这就是问题所在。我正在尝试弄清楚如何将"卡片排序"一词替换为"CardSort",因为这两个单词之间的空格弄乱了我拥有的另一个脚本。我需要将新的字符串替换(CardSort)写入文件,并将以前的字符串替换为空格。

我整天都在研究这个问题(在编程:(方面我很笨拙),这就是我到目前为止想出的:

# Set the variables for find/replace
@original_string_or_regex = /Card Sort/
@replacement_string = "CardSort"
Dir.foreach("~/Desktop/macshapa_v2") do |file_name|
    next if file_name == '.' or file_name == '..'  # do work on real items
    text = File.read(file_name)
    replace = text.gsub!(@original_string_or_regex, @replacement_string)
    File.open(file_name, "w") { |file| file.puts replace }
end

我认为问题在于我没有定义变量"file_name",但我不知道它应该定义为什么。基本上,它只需要运行整个目录,进行所需的更改。

此外,如果我在一个文件夹中有多个文件夹和子目录,如何让它运行所有这些文件夹和子目录并应用更改,而不必逐个浏览每个文件夹?感谢所有的帮助,我真的很感激。

你不需要定义它file_name它是块的结果。如果你觉得什么都没发生,那可能是因为你的表情什么也没得到。尝试在块中添加puts file_name,您将看到它找到了哪些文件。我的猜测是您的脚本没有要迭代的文件,因为Dir.foreach不适用于~/.

# Set the variables for find/replace
# you can use regular variables here
original_string_or_regex = /Card Sort/
replacement_string = "CardSort"
# Dir.glob will take care of the recursivity for you
# do not use ~ but rather Dir.home
Dir.glob("#{Dir.home}/Desktop/macshapa_v2/*") do |file_name|
  text = File.read(file_name)
  replace = text.gsub!(original_string_or_regex, replacement_string)
  File.open(file_name, "w") { |file| file.puts replace }
end

最新更新