![](/img/trans.png)
[英]How to search and replace strings in all of the files in my directory using 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
sed
( GNU 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.