[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Esse é difícil - procurar uma expressão e altera-la -
From: |
Flavio Junior |
Subject: |
Re: [shell-script] Esse é difícil - procurar uma expressão e altera-la - varios arquivos |
Date: |
Wed, 5 Nov 2008 11:59:01 -0200 |
Na real eu acabei esquecendo de por o "-l" do grep no teu find..
Erro meu mesmo:
$ for file in $(find . -iname Makefile -exec grep -l "SPARSE ATIVO" {} \;);
do
> DIR=$(dirname $file)
> sed -i.bkp "s/SPARTE ATIVO/SPARSE ATIVO - $DIR/" $file
> done
Com o -l o grep vai retornar somente o nome do arquivo.
--
Flávio do Carmo Júnior aka waKKu
2008/11/5 jimmy <address@hidden>
> On Wed, Nov 05, 2008 at 08:05:10AM -0500, Édnei Rodrigues wrote:
> > Bom dia lista.
> > Tinha feito uma modificação em vários Makefile e , burrice, esqueci de
> > inserir na expressão o nome do arquivo.
> > Deixa eu explicar melhor:
> >
> > tenho essa lista de makefile (exemplo):
> >
> > [ednei@eng-17 voip]$ find . -name Makefile
> > ./upnp/libupnp/threadutil/Makefile
> > ./upnp/libupnp/upnp/doc/Makefile
> > ./upnp/libupnp/upnp/Makefile
> > ./upnp/libupnp/ixml/doc/Makefile
> > ./upnp/libupnp/ixml/Makefile
> > ./upnp/libupnp/Makefile
> > ./upnp/libigdctrl/Makefile
> > ..
> > ..
> >
> > dentro deles está:
> > [ednei@eng-17 voip]$ find . -iname Makefile -exec grep "SPARSE ATIVO" {}
> \;
> >
> > @echo " SPARSE ATIVO!!!"
> > @echo " SPARSE ATIVO!!!!"
> > @echo " SPARSE ATIVO!!!!"
> > @echo " SPARSE ATIVO!!!!"
> > @echo " SPARSE ATIVO!!!"
> > @echo " SPARSE ATIVO!!!"
> > @echo " SPARSE ATIVO"
> > @echo " SPARSE ATIVO!!!!"
> > @echo " SPARSE ATIVO!!!!"
> >
> > Notem que eu inseri essa expressão em cada makefile, mas esqueci de fazer
> > isso:
> >
> > @echo " SPARSE ATIVO!!! - /upnp/libigdctrl "
> > @echo " SPARSE ATIVO!!!! - ./upnp/libupnp/upnp/doc/"
> >
> > e assim vai....É possível fazer isso ? Pegar o makefile respectivo de
> cada
> > diretório, inserir naquela expressão o diretório corrente ???
> >
> >
> >
> > Obrigado pelas respostas.
> >
> >
> > ------------------------------------
>
> bom leventei aqui na minha máquina um ambiente para emular o seu caso:
>
> user@host:/tmp/teste$ echo './upnp/libupnp/threadutil/Makefile
> ./upnp/libupnp/upnp/doc/Makefile
> ./upnp/libupnp/upnp/Makefile
> ./upnp/libupnp/ixml/doc/Makefile
> ./upnp/libupnp/ixml/Makefile
> ./upnp/libupnp/Makefile
> ./upnp/libigdctrl/Makefile' | xargs -i@ sh -c 'path=$(dirname @); mkdir -p
> $path; touch @'
> user@host:/tmp/teste$ tree
> .
> `-- upnp
> |-- libigdctrl
> | `-- Makefile
> `-- libupnp
> |-- Makefile
> |-- ixml
> | |-- Makefile
> | `-- doc
> | `-- Makefile
> |-- threadutil
> | `-- Makefile
> `-- upnp
> |-- Makefile
> `-- doc
> `-- Makefile
>
> 8 directories, 7 files
> user@host:/tmp/teste$ find . -iname Makefile -exec sh -c 'echo @echo \"
> SPARSE ATIVO!!!\" > {}' \;
>
> então fiz uma solução:
>
> user@host:/tmp/teste$ find . -iname Makefile -printf "%p %h\n" |
> while read file path; do sed 's#\(SPARSE ATIVO!*\)"#\1 - '"$path"'"#'
> $file; done
>
> isso é para testar; filtre a saída com um grep e se for o que está
> procurando insira a opção -i no comando sed, "sed -i ..."
>
>
[As partes desta mensagem que não continham texto foram removidas]