No sed, você pode colocar um regexp (entre /…/
) antes do comando s
para executar apenas a substituição nas linhas que contêm esse regexp. A opção -i
para modificar arquivos no lugar é específica para o GNU sed (que é o que você tem no Linux e no Cygwin).
sed -i -e '/^ *# *include/ s!\\!/!g' **/*.h **/*.cpp
Em Perl, basta colocar uma condição antes de fazer a substituição.
perl -i -pe 'if (/^\s*#\s*include/) {s!\\!/!g}' **/*.h **/*.cpp
perl -i -pe '/^\s*#\s*include/ and s!\\!/!g' **/*.h **/*.cpp
A sintaxe **/
para corresponder arquivos no diretório atual e seus subdiretórios recursivamente requer zsh, ou bash ≥4 depois de fazer shopt -s globstar
. Com outros shells, você precisa usar o find.
find \( -name '*.h' -o -name '*.cpp' \) -exec perl -i -pe '…' {} +