我正在使用Capistrano进行部署,我需要运行一个命令来在服务器上的.htaccess文件中设置正确的环境。
我使用sed
这样做:run "sed -i -r 's/APPLICATION_ENV \w+/APPLICATION_ENV #{stage}/' #{current_release}/public/.htaccess"
我的问题是,\w+
被Ruby / Cap转义,正则表达式最终只尝试匹配w+
。如果我使用\\w+
,我最终会使用试图匹配\\w+
的正则表达式。
如何使用插值双引号字符串并成功转义\w
?我是否真的需要更改单引号字符串和变量的连接?
答案 0 :(得分:1)
在我的系统上,您的样本可以正常运行,但您可以尝试使用这两个中的一个(评论那些您不能使用的样本)
begin
stage = "stage"
current_release = "current_release"
s = "sed -i -r 's/APPLICATION_ENV \\w+/APPLICATION_ENV #{stage}/' #{current_release}/public/.htaccess"
s = "sed -i -r 's/APPLICATION_ENV #{"\\w+"}/APPLICATION_ENV #{stage}/' #{current_release}/public/.htaccess"
s = "sed -i -r 's/APPLICATION_ENV #{92.chr}w+/APPLICATION_ENV #{stage}/' #{current_release}/public/.htaccess"
puts s
system s
rescue
puts $!
system('pause')
end