基準に基づいて複数のファイルから検索して置換する

基準に基づいて複数のファイルから検索して置換する

Visual Studio C ++プロジェクトをLinuxに移植し、すべての.hファイルと.cppファイルで#includeで始まるすべての行を見つけ、その行のバックスラッシュをスラッシュに置き換えたいと思います。

オンラインで検索して置き換える方法(Perlやsedを使用)などのスクリプトはいくつかありますが、条件付きのスクリプトはありません。

最良の方法は何ですか?

ありがとう

ベストアンサー1

sedでは、/…/正規表現をコマンドの前に(それらの間に)配置して、sその正規表現を含む行でのみ置換を実行できます。ファイルを変更するオプションは、-iGNU sedに固有のものです(LinuxおよびCygwinのオプション)。

sed -i -e '/^ *# *include/ s!\\\\!/!g' **/*.h **/*.cpp

Perlでは、置換を実行する前に条件を追加するだけです。

perl -i -pe 'if (/^\s*#\s*include/) {s!\\\\!/!g}' **/*.h **/*.cpp
perl -i -pe '/^\s*#\s*include/ and s!\\\\!/!g' **/*.h **/*.cpp

**/現在のディレクトリとサブディレクトリのファイルを繰り返し一致させる構文には、実行後にzshまたはbash≥4が必要ですshopt -s globstar。他のシェルの場合は find を使用する必要があります。

find \( -name '*.h' -o -name '*.cpp' \) -exec perl -i -pe '…' {} +

おすすめ記事