質問があります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