shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Alterando conteudo de arquivos em massa


From: Marcos Notari Junior
Subject: Re: [shell-script] Alterando conteudo de arquivos em massa
Date: Mon, 14 Jan 2008 15:49:17 -0200

Caros,

Eu desenvolvi a um tempo uma solução que sempre me ajudou muito nessas
situações:

######################################################################
#!/bin/sh
######################################################################

# Usar os parametros com aspas
if [ $# -ne 2 ]
then
    echo "Usage: change_param.sh {old_param} {new_param}"
    exit
fi

# Trocar o *.jsp para a extensao desejada
for i in `grep -i -l $1 *.jsp`
do
echo "Updating $i"
sed -e "s/$1/$2/g"  $i > $i.out
mv -f $i.out $i
done
######################################################################


Se ajudar...

Abraços...

Marcos Notari Junior


Em 14/01/08, Tiago Barcellos Peczenyj <address@hidden> escreveu:
>
>   William
>
> Apesar do seu one-liner funcionar sem problemas, vc vai chamar o sed
> tantas
> vezes quantas houverem arquivos.
>
> Se vc passar a lista de arquivo na lista de parâmetros vc terá uma imensa
> velocidade.
>
> sed -i 's/internetExplorer/Firefox/g' *
>
> ou, com xargs
>
> ls | xargs sed -i 's/internetExplorer/Firefox/g'
>
> uma terceira alternativa é imprimir o nome dos arquivos que tem a string
> que
> vc quer via um grep (favor checar as opções)
>
> grep -HF 'internetExplorer' * | xargs sed -i
> 's/internetExplorer/Firefox/g'
>
> E, se os arquivos forem muito grandes, use
>
> sed -i '/internetExplorer/s//Firefox/g' # pelo menos no gsed da mais
> performance.
>
> Não sei de quantos arquivos estamos lidando nesse caso ou em outros
> parecidos, mas vale a pensa pensar nesses detalhes, do contrario a edição
> scriptada pode demorar tanto que chega a ser proibitiva (principalmente se
> não temos ideia de quanto ja foi editado).
>
> On 1/14/08, William José Vicente <address@hidden<williamvicente%40gmail.com>>
> wrote:
> >
> > Ráyner,
> >
> > pode não ser a melhor forma, mas eu faria um for para cada arquivo
> > desejado e usaria o sed para a substituição. Seria mais ou menos assim:
> >
> > for arq in *; do sed 's/internetExplorer/Fiferox/g' $arq; done
> >
> > No lugar do * você pode trocar por uma lista de arquivos ou um `cat
> > arquivo` para obter esta lista.
> >
> > Abraços,
> >
> > William
> >
> > Em 14/01/08, Ráyner <address@hidden 
> > <raynercl%40yahoo.com.br><raynercl%40yahoo.com.br>>
> > escreveu:
> > >
> > > Há alguma maneira de se alterar o conteúdo dos
> > > arquivos em grande escala? O que eu quero na verdade e
> > > entrar em vários arquivos e substituindo uma palavra
> > > por outra.
> > >
> > > Tipo:
> > >
> > > ls | cat |ed s/internetExplorer/Fiferox/ g
> > > #isso não da certo
> > >
> > > Já tentei alguns comandos mas nenhum da certo.
> > >
> > > Obrigado
> > >
> > > Ráyner Carvalho
> > > (61) 9137-6842
> > >
> > > Abra sua conta no Yahoo! Mail, o único sem limite de espaço para
> > > armazenamento!
> > > http://br.mail.yahoo.com/
> > >
> > >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
> --
> Tiago B Peczenyj
> Linux User #405772
>
> http://peczenyj.blogspot.com/
> "what does not kill us makes us stronger"
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]