用unix命令替换所有文件中的ruby代码

时间:2016-08-02 00:53:26

标签: ruby-on-rails regex unix

我有一个字符串!Rails.env.dev? || params['render_javascript']。 我想用render_javascript替换此字符串。如果我按一个文件一个文件执行它将会有很多工作。 我尝试使用如下的unix命令,但没有运气。

for i in $(find . -name "*.rb")
do
       sed 's/!Rails\.env\.dev\? \|\| params\['render_javascript'\]/render_javascript/g' $i > x
       mv x $i
done

任何人都可以在这里给我一些帮助吗?

1 个答案:

答案 0 :(得分:1)

您的代码/命令中存在一些问题。首先,你不必要地逃避角色。其次,如果我们使用双引号来引用sed命令,那么在这种情况下会更好。您可以尝试以下命令:

for i in $(find . -name "*.rb")
do
    sed "s/\!Rails\.env\.dev? || params\['render_javascript'\]/render_javascript/g" $i > x 
    mv x $i
done

sedGNU sed)使用的Basic Regular expression (BRE)没有?|元字符,因此您无需逃避它们。由?添加元字符|Extended Regular Expresson (ERE)

而且,我使用双引号"来引用sed命令,因为搜索正则表达式中有单引号'。因为双引号用于引用sed命令,所以我们还必须转义!字符。我们必须转义!,因为它是一个shell特殊字符,并且在运行sed命令之前会扩展为其他内容。

如果要使用Extended regular expression (ERE),则可以使用-r命令使用sed选项。在这种情况下,您有转义?|字符。例如:

sed -r "s/\!Rails\.env\.dev\? \|\| params\['render_javascript'\]/render_javascript/g" $i > x