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: Julio C. Neves
Subject: Re: [shell-script] Alterar linhas em um arquivo via shell script
Date: Fri, 9 Mar 2007 12:03:54 -0300

Fala Gunter,
Aconselho que vc refaça o seu benchmark usando sed ou awk no log do postfix.
Aliás, se não me engano, o Tiago Barcellos Peczenyj (colega da lista) está
fazendo justamente isso para trocar o core do Jegue Panel (um tremendo
projeto nacional (da Paraíba) livre, para controlar redes de servidores
Samba e Postfix) de perl para Shell.

Abraços,
Julio
:wq


Em 09/03/07, Bruno Gunter Fricke <address@hidden> escreveu:
>
>   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<gunter%40infolink.com.br>>
> 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>
> <gunter%
> > 40infolink.com.br>>
> > > wrote:
> > > > >
> > > > > Use PHP.
> > > > >
> > > > >
> > > > > ----- Original Message -----
> > > > > From: kblocat
> > > > > To: address@hidden<shell-script%40yahoogrupos.com.br>
> <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]
>
>  
>


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



reply via email to

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