我有一个问题find
:
find -name '*.cpp' -exec sed -i 's|foo{}|bar{}|g' \{\} \;
查找将用不正确的文件名替换所有出现的情况。如果我尝试在 sed 表达式中转义“{}”,就像这样
find -name '*.cpp' -exec sed -i 's|foo\{\}|bar\{\}|g' \{\} \;
我从 得到语法错误sed
。
答案1
没有办法在参数中find
不替换。相反,修改表达式中的,使其不再精确地为。例如,您可能只是转义:{}
-exec
{}
sed
{}
}
find . -name '*.cpp' -exec sed -i 's/foo{\}/bar{\}/g' {} +
这将避免将参数中的find
替换为。{}
sed
{}
转义as的问题\{\}
在于它是一个无效的正则表达式。通常,人们在诸如 之类的表达式中使用\{
and ,这与\}
A\{0,1\}
延长正则表达式A{0,1}
或A?
.如果您还使用with来启用扩展正则表达式支持,那么使用\{\}
就可以了。sed
-E
sed
请注意,我在命令中稍微更改了调用,find
以便一次find
调用sed
尽可能多的找到的文件。