Substituir palavras em arquivos

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

[ Hits: 14.051 ]

Homepage: https://mestrefabio.com

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

Troca palavras em Perl

Ircbot

Agenda em Perl

Script que mostra a temperatura do processador

data e hora


  

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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts