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ために、コマンドの呼び出しを少し変更しました。findsed

おすすめ記事