使用gsub重命名文件的不同行为

时间:2018-07-27 10:35:33

标签: ruby scripting

我无法使用模式匹配正确重命名目录。 尝试用文件路径中的old_name(可以是任何字符串)替换new字符串的最后一次出现:

./old_name/*/old_name/ ==> ./old_name/*/new/

如果我使用类似下面代码的字符串文字,我将得到所需的结果:

dir_name = name.gsub(/(.*)#{old_name}/, '\1new')

问题是,当我尝试使用带插值的可变字符串替换文字'\1new'时,可以将其更改为任何给定名称:

dir_name = name.gsub(/(.*)#{old_name}/, "\1#{any_string}")

这就是我得到的:

./old_name/*/old_name/ ==> new

1 个答案:

答案 0 :(得分:1)

它实际上以"\u0001new/"结尾,当您puts时,它显示为new/。原因是因为在双引号字符串中,您需要转义反斜杠,因此它可以直达gsub调用:

dir_name = name.gsub(/(.*)#{old_name}/, "\\1#{any_string}") # => "./old_name/*/new/"