Pular para o conteúdo

Substituir palavras em arquivos

Script usado para fazer a substituição de todas as ocorrências de uma "string A" por uma "string B" numa lista de arquivos informada. Exemplo:

./substituir.pl Liuxn Linux *.txt
Fábio Berbert de Paula fabio
Hits: 14.458 Categoria: Perl Subcategoria: Expressões Regulares
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

Script usado para fazer a substituição de todas as ocorrências de uma "string A" por uma "string B" numa lista de arquivos informada. Exemplo:

./substituir.pl Liuxn Linux *.txt
Download substituirPL.zip Enviar nova versão

Esconder código-fonte

#!/usr/bin/perl
######################################################
# Programado por Fábio Berbert de Paula
# <fabio@vivaolinux.com.br>
# www.vivaolinux.com.br
#
######################################################

if ($#ARGV < 2) {
print <<FIM;
-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Use: $0 <palavra-alvo> <nova-palavra> [lista de arquivos...]

Onde  <palavra-alvo>  é  a  palavra  a  ser substituída, 
<nova-palavra> é a palavra que substituirá  a ocorrência
da  palavra-alvo  e  [lista de arquivos...]  é opcional, 
podendo  conter  máscaras  como  *.txt,  por exemplo. Se
a lista de arquivos não for informada, todos os arquivos
do diretório serão processados.

-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
FIM
exit(1);
}

system("/usr/bin/clear");

# importe as palavras a serem manipuladas
$velha = shift();
$nova = shift();

print "Substituindo todas as ocorrências "; 
print "de \n\"$velha\" para \"$nova\"...\n\n";

# importe a lista de arquivos a ser processo
$cont = 0;
while ($arq[$cont++] = shift()) {next;}
if ($cont == 0) {$arq[$cont] = "*";}

# para cada arquivo ou máscara...
foreach $indice (0..$#arq) {
   $arquivos = `/bin/ls -d $arq[$indice]`;
   chop($arquivos);
   @arquivos = split(/\n/,$arquivos);
   # ... processe um arquivo individualmente
   foreach $arquivo (@arquivos) {
      # se o arquivo existe ;o)
      if (-f $arquivo) {
         print "Processando $arquivo...\n";
         system("/bin/sed -e \"s/$velha/$nova/g\" $arquivo > $arquivo.tmp");
         system("/bin/mv $arquivo.tmp $arquivo");
         print "... [ OK ]\n\n";
      }
   }
}

Troca palavras em Perl

Agenda em Perl

Ircbot

Script que mostra a temperatura do processador

data e hora

#1 Comentário enviado por cmarcelo em 20/05/2003 - 16:45h
Eu não consigo utilizar caracteres coringa neste script =(
Podem me dar uma força?
#2 Comentário enviado por fabio em 20/05/2003 - 16:47h
Como você está aplicando caracteres coringa? Nos dê um exemplo.

[]'s,
Fábio
#3 Comentário enviado por msilva em 19/05/2007 - 16:52h
como posso adaptar este script para windows ??

#4 Comentário enviado por msilva em 22/05/2007 - 14:07h
Olá fabio,



vi o seu script substituir.pl tá muito legal.

Mas eu queria usar para fazer o seguinte:



substituir (considerando as várias situações):



fprintf(logfile, "olá mundo: %s", contador);

fprintf ( logfile , "olá mundo: %s", contador);

fprintf ( logfile , "olá mundo: %s", contador);



por:



printf "olá mundo: %s", contador";





Já tentei com o sed, mas não consegui.

Com o perl consegui fazer a expressão mas não a consegui colocar a funcionar dentro do System("");



Como posso fazer a expressão em sed ou como posso colocar uma expressão em perl com o seu script para que funcione ?



Cumprimentos

#5 Comentário enviado por henriquejne em 05/05/2012 - 21:33h
Oi Fabio estava precisando de solução como esta, vi que postou em 2002 quase 10 anos, mas continua servido muito obrigado.

Contribuir com comentário

Entre na sua conta para comentar.