我正在使用git进行rails项目,我在一个旧的提交文件中有以下行:user_name: 'ENV[GMAIL_SMTP_USER]',
我正在尝试替换所有旧提交的这一行,以便我可以取消引号(')并在括号内替换它们:user_name: ENV['GMAIL_SMTP_USER'],
。我正在使用sed
和--tree-filter
来完成它。如下所示:
git filter-branch --tree-filter "sed -i .bkp s/'ENV[GMAIL_SMTP_USER]'/ENV['GMAIL_SMTP_USER']/g config/environments/development.rb" -f
此命令运行正常且没有错误,但它不会取出引号。此外,我可以说该命令确实可以替换,因为在此之前,我已经成功地将user_name: 'myGmailUserName'
更新为user_name: 'ENV[GMAIL_SMTP_USER]'
问题仅在于删除引号。缺少什么?
提前致谢。
答案 0 :(得分:2)
在搜索模式中以[
退出]
和\
:
echo "user_name: 'ENV[GMAIL_SMTP_USER]'," | sed "s/user_name: 'ENV\[GMAIL_SMTP_USER\]',/user_name: ENV['GMAIL_SMTP_USER'],/"
输出:
user_name: ENV['GMAIL_SMTP_USER'],
答案 1 :(得分:0)
正如Cyrus所说,我遇到了逃避的问题,但这与引文本身有关。而且,我不知道为什么,即使有了转义,它也无法使用我正在使用的存储库,这是一个克隆的存储库(备份)。
因此,我创建了一个新的克隆存储库并运行以下转义引号:
git filter-branch --tree-filter "sed -i.bkp s/\'ENV[GMAIL_SMTP_USER]\'/ENV[\'GMAIL_SMTP_USER\']/g config/environments/development.rb" -f
有人有更好的答案吗?也许解释为什么它在第一个克隆存储库中不起作用......