Substituir palavras em arquivos

Publicado por Fábio Berbert de Paula 13/11/2002

[ Hits: 14.404 ]

Homepage: https://fabio.automatizando.dev

Download substituirPL.zip




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

  



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";
      }
   }
}

Scripts recomendados

Script que mostra a temperatura do processador

Agenda em Perl

Troca palavras em Perl

data e hora

Ircbot


  

Comentários
[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