2016-08-02 66 views
0

我有一个字符串!Rails.env.dev? || params['render_javascript']。 我想用render_javascript替换此字符串。如果我通过一个文件来完成一个文件,将会有很多工作。 我试图使用unix命令如下,但没有运气。用unix命令替换所有文件中的ruby代码

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

你的代码/命令中有几个问题。首先,你不必要地逃避角色。其次,如果我们用双引号引用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 
+0

谢谢。我跑上面的脚本,它运作良好,但每个文件的结尾都有额外的换行符。 –

+0

您的意思是脚本在文件末尾添加了一个额外的换行符?这是发生在所有文件?或只有一些文件? – sps

+0

所有文件。我认为unix认为每个文件都应该以新行char结尾。 –