繁体   English   中英

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

[英]replace ruby code in all files with unix command

我有一个字符串!Rails.env.dev? || params['render_javascript'] !Rails.env.dev? || params['render_javascript'] !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

有人可以在这里为我提供帮助吗?

您的代码/命令中几乎没有问题。 首先,您不必要地转义了字符。 其次,如果我们使用双引号对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) ,则可以在sed命令中使用-r选项。 在这种情况下,您有逃脱? | 字符。 例如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM