para remover comentários (comece com #
e /* comment */
) em settings.php
, abaixo o comando é apenas funciona bem:
sed '/^\#/d' settings.php > outp.txt
mv outp.txt settings.php
sed '/\/\*/,/*\//d; /^\/\//d; /^$/d;' settings.php > outp2.txt
mv outp2.txt settings.php
sed '/^$/d' settings.php > outp3.txt
mv outp3.txt settings.php
Mas como remover comentários em todos os arquivos, inclusive em subdiretórios?
sed -i
para fazer uma edição no local. Além disso, você está fazendo/^$/d
duas vezes.sed
. Vou dar uma olhadaRespostas:
Começando pelo diretório que você deseja percorrer, você pode f.e. usar
find ./ -type f -name '*.php' -print0 | xargs -0 sed -i '/^\#/d'
. xargs constrói a lista de argumentos para sed para melhor desempenho e a opção -i de sed substitui o padrão no local (você não precisa usar o redirecionamento).EDITAR: De acordo com a manpage de encontrar
find ./ -name '*.php' -type f -print0 | xargs -0 sed -i '/^\#/d'
é ainda mais rápido, porque não chama stat em todos os arquivos (opção -tipo).fonte
-print0
parâmetro parafind
E usexargs -0
- isto acrescentará \ 000 (chr (0), caractere ascii 0, 0x00, chame como quiser) após cada nome de arquivo, e diz ao xargs para esperar que o caractere seja um delimitador de nome de arquivo. Isso permite manipular nomes de arquivos com espaços neles.Você pode sed 'no lugar' com -i. Você pode concatir comandos sed com ponto e vírgula como este: 'c1; c2; c3' Você pode executar comandos com find - não há necessidade de | xargs.
Isso funciona para o gnu-find no linux; talvez seu achado não tenha -execdir, -exec deva funcionar também, e talvez não tenha +, então ";" seria uma solução simples, mas não tão rápida, ou usando xargs como mostrado acima por p.vitzliputzli com a melhoria de Matt para nomes de arquivos com espaço em branco e caracteres especiais é uma alternativa.
fonte
Você pode usar o Vim no modo Ex:
g
pesquisa globald
excluirx
salvar e fecharfonte