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

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

Re: [shell-script] Alterar linhas em um arquivo via shell script


From: Bruno Gunter Fricke
Subject: Re: [shell-script] Alterar linhas em um arquivo via shell script
Date: Fri, 09 Mar 2007 11:43:46 -0300

Grande Julio e demais colegas da lista,

Perdoem-me, realmente não li o rodapé ;-)
Não toco mais no assunto... Afinal eu posso em shell chamar outra
aplicação que conecte a um banco.

Quanto a um shell que faz isto em apenas uma linha, realmente é válido
neste ponto. Porém teremos aquele ponto de performance. Não tocarei mais
no assunto, porém por experiencia própria, se o arquivo é muito grande
(como um log de postfix), não recomendo o shell.

Mas realmente, para um arquivo pequeno como o conf do squid, resolve e
muito bem.

[]'s
Gunter



On Fri, 2007-03-09 at 11:22 -0300, Julio C. Neves wrote:
> Ô Bruno,
> vc mandou fazer em PHP pq não conhece Cobol, se conhecesse,
> provavelmente
> aconselharia o uso desta linguagem :). Mas de qq forma isso aqui é uma
> lista
> de Shell e como diz no rodapé de todas as msgs:
> ----------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação,
> como
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> prévio
> aviso.
> ----------------------------------------------------------
> Portanto vamos falar em shell antes que te modere. Se vc quiser, *em
> pvt*
> (pq se vc voltar a tocar no assunto na lista, vou te moderar) aposto
> um
> chope contigo que para resolver este problema ou qq outro que trabalhe
> com
> arquivos planos o shell dá banho de performance no PHP, até pq o PHP
> *obrigatóriamente* terá de rodar sob um shell.
> 
> Christian, vamos ao que interessa,: tentei fazer um genérico pq acho
> que foi
> isso que vc queria qdo disse aleatorio. Veja:
> 
> $ cat troca.sh
> sed "s/^#\(.*lab$1$\)/\^\1/;s/^\(http.*lab$1$\)/#\1/;s/^\^//" s.conf
> 
> Veja as explicações do Tiago e complemente com estas:
> Os ponto-e-vírgula dividem o sed em 3 pedaços que são executados na
> ordem em
> que aparecem. O artifício que usei foi procurar a linha que termina
> pelo lab
> desejado e está comentada (começa por #) e trocar o jogo-da-velha por
> um
> circunflexo, em seguida pego a descomentada (começa por http) e
> termina pelo
> lab desejado e ponho um comentario (#) e, para terminar, extraio o
> circunflexo que tinha colocado.
> 
> 1o. Pedaço - s/^#\(.*lab$1$\)/\^\1/
> Aqui os parênteses precisam de ser escapados com contrabarras e servem
> para
> armazenar o conteúdo entre eles. O resto da linha diz: substitua (s) a
> linha
> que começa (^) por jogo-da-velha e termina (o último $) em lab seguido
> do
> parâmetro passado ($1), por cincunflexo (^) seguido do resto da linha
> sem o
> jogo-da-velha.
> 
> O resto da linha é o que estava entre parênteses, que foi chamado de
> volta
> pelo uso do \1.
> 
> 2o. Pedaço - s/^\(http.*lab$1$\)/#\1/
> Bastante parecido com o primeiro. troque (s) a linha que começa (^)
> por http
> e termina (o último $) em lab seguido do parâmetro passado ($1), por #
> seguido pelo restante da linha (ou seja, o \1 está devolvendo o que
> foi
> guardado pelos parênteses).
> 
> 3o. Pedaço - s/^\^//
> Troca o circunflexo (o segundo) que começa (o primeiro) um linha por
> nada.
> 
> A vantagem deste método é que vc passa somente o número do lab como
> parâmetro e seu estado é trocado, isto é, permite comentar a linha do
> allow
> e descomentar o do deny correspondente ou vice versa. Teste e, caso vc
> goste, troque sed por sed -i, para que as alterações se reflitam no
> arquivo
> (por enquanto só aparece na tela).
> 
> Agora me diga: se em Shell um one-liner que faz isso tudo, para que
> usar
> outra linguagem. No teste a seguir passei o 3 como parâmetro para
> alterar o
> lab3.
> 
> $ ./troca.sh 3
> #http_access deny lab1
> http_access allow lab1
> 
> #http_access deny lab2
> http_access allow lab2
> 
> http_access deny lab3
> #http_access allow lab3
> 
> #http_access deny lab4
> http_access allow lab4
> $ cat troca.sh
> sed "s/^#\(.*lab$1$\)/\^\1/;s/^\(http.*lab$1$\)/#\1/;s/^\^//" s.conf
> 
> Em 09/03/07, Bruno Gunter Fricke <address@hidden> escreveu:
> >
> > Porque o PHP vai trabalhar muito melhor os casos do que o shell. Não
> é
> > que seja impossível, apenas não será prático, sem contar que o shell
> é
> > muito mais lento do que o PHP. Talvez, seja melhor até fazer em
> Perl.
> >
> > Ou será que você é daqueles que "acham" que o shell conecta em banco
> de
> > dados também? ;-)
> >
> > []'s
> > Gunter
> >
> >
> > On Fri, 2007-03-09 at 08:10 -0300, Tiago Barcellos Peczenyj wrote:
> > > Por que PHP?
> > > É impossivel fazer via qualquer comando interno do shell ou
> ferramenta
> > > basica do mundo unix?
> > >
> > > Uma solução, para comentar, seria utilizar o sed com a opção -i
> para
> > > que ,
> > > na linha que vc quer, ele substituisse a linha por ela mesma porem
> com
> > > um
> > > simbolo de # na frente
> > >
> > > sed -i 's/REGRA/#&/' arquivo
> > >
> > > agora e para descomentar?
> > >
> > > sed -i '/REGRA/s/^#//'
> > >
> > > ou seja, na ocorrencia da regra, ele vai trocar o simbolo # do
> começo
> > > da
> > > linha por nada.
> > >
> > > Pode ficar melhor? Pode, existem N formas, esta é só uma.
> > >
> > > []´s Tiago
> > >
> > > On 3/9/07, Bruno Gunter Fricke <address@hidden<gunter%
> 40infolink.com.br>>
> > wrote:
> > > >
> > > > Use PHP.
> > > >
> > > >
> > > > ----- Original Message -----
> > > > From: kblocat
> > > > To: address@hidden<shell-script%
> 40yahoogrupos.com.br><shell-script%
> > > 40yahoogrupos.com.br>
> > > > Sent: Thursday, March 08, 2007 11:34 PM
> > > > Subject: [shell-script] Alterar linhas em um arquivo via shell
> > > script
> > > >
> > > > Pessoal, boa noite.
> > > >
> > > > Meu problema é o seguinte :
> > > >
> > > > Preciso liberar/bloquear laboratórios através do squid.conf, ou
> > > seja :
> > > >
> > > > #http_access deny lab1
> > > > http_access allow lab1
> > > >
> > > > #http_access deny lab2
> > > > http_access allow lab2
> > > >
> > > > #http_access deny lab3
> > > > http_access allow lab3
> > > >
> > > > #http_access deny lab4
> > > > http_access allow lab4
> > > >
> > > > Resumindo, dependendo da solicitação do usuário, por exemplo:
> Ele
> > > quer
> > > > bloquear a Internet no lab 1 e lab3
> > > >
> > > > Beleza, é só comentar a linha allow dos labs 1 e 3 e descomentar
> as
> > > linhas
> > > > com deny.
> > > >
> > > > Montei arquivos squid.conf com as linhas comentadas e depois o
> > > script
> > > > deletava e renomeava os arquivos.
> > > >
> > > > Mas às vezes o cara quer liberar e bloquear em sequencias
> > > aleatórias, aí
> > > > teria que criar arquivos com todas as combinações possíveis,
> além
> > > disso
> > > > qquer alteração no squid.conf, teria que replicar nos demais: mó
> > > trampo.
> > > >
> > > > Qual a pergunta: teria como eu comentar/descomentar as linhas de
> > > acordo
> > > > com
> > > > a seleção aleatória do usuário via shell, sem que ele tenha que
> > > editar o
> > > > squid.conf no braço ?
> > > >
> > > > Tá lançado o desafio. Aguardo sugestões .
> > > >
> > > > Obrigado
> > > >
> > > > Christian
> > > >
> > > > [As partes desta mensagem que não continham texto foram
> removidas]
> > > >
> > > > [As partes desta mensagem que não continham texto foram
> removidas]
> > > >
> > > >
> > > >
> > >
> > > --
> > > Tiago B Peczenyj
> > > Linux User #405772
> > >
> > > # cd /pub
> > > # more beer
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > >
> > >
> > >
> > >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> > 
> >
> 
> [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]