Deve haver uma função incorporada para isso no VS.
Se não, você pode usar o bom e velho vi
:
vi +'bufdo %s/AAA/BBB/g | update' +q $(grep -rl AAA /cygdrive/c/project_path)
Eu uso o Visual Studio para meu desenvolvimento em C # enquanto uso o Cygwin para algumas das tarefas que requerem scripts. Recentemente eu quis mudar todas as ocorrências da string AAA
para BBB
nos arquivos do meu projeto. Comecei com o antigo e confiável sed
, mas, para meu espanto, ele mudou as novas sequências de linha do DOS para as do Unix.
Veja o que eu usei:
sed -i 's/AAA/BBB/g' $(grep -rl AAA /cygdrive/c/project_path)
Parece que não há uma chave sed
que faça o que eu quero. Existe alguma outra ferramenta Unix que possa me ajudar?
EDITAR: Entre os arquivos C # existem alguns outros scripts que possuem novos caracteres de linha do Unix. Seria melhor se essa ferramenta não os alterasse para os do DOS. :)
Você pode usar o perl do Cygwin. Comandos sed típicos mapeiam facilmente para Perl. Observe que a sintaxe regex é diferente (expressões regulares estendidas em Perl, expressões regulares básicas em sed).
perl -i -pe 's/AAA/BBB/g' $(grep -rl AAA /cygdrive/c/project_path)
Observe que analisar o resultado de uma substituição de comando como uma lista de arquivos é frágil. Ele irá quebrar se houver espaços ou barras invertidas nos nomes dos arquivos; ambos são bastante comuns no Windows (você recebe barras invertidas quando um caminho não foi traduzido do nativo para o cygwin, por exemplo, quando ele vem de uma variável de ambiente). Use xargs -d '\n'
(não há novas linhas nos nomes de arquivos do Windows).
grep -rl AAA /cygdrive/c/project_path | xargs -d '\n' perl -i -pe 's/AAA/BBB/g'