我有一个字符串!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
任何人都可以在这里给我一些帮助吗?
答案 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
sed
(GNU 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