使用 find 时在 sed 中转义大括号

使用 find 时在 sed 中转义大括号

我有一个问题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尽可能多的找到的文件。

相关内容