用SED替换文件中的文本

时间:2014-10-30 20:22:58

标签: git sed

我正在使用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]'

问题仅在于删除引号。缺少什么?

提前致谢。

2 个答案:

答案 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

有人有更好的答案吗?也许解释为什么它在第一个克隆存储库中不起作用......