Visual Studio C ++プロジェクトをLinuxに移植し、すべての.hファイルと.cppファイルで#includeで始まるすべての行を見つけ、その行のバックスラッシュをスラッシュに置き換えたいと思います。
オンラインで検索して置き換える方法(Perlやsedを使用)などのスクリプトはいくつかありますが、条件付きのスクリプトはありません。
最良の方法は何ですか?
ありがとう
答え1
sedでは、/…/
正規表現をコマンドの前に(それらの間に)配置して、s
その正規表現を含む行でのみ置換を実行できます。ファイルを変更するオプションは、-i
GNU 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 '…' {} +