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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]<gunter% > 40infolink.com.br>> > > wrote: > > > > > > > > Use PHP. > > > > > > > > > > > > ----- Original Message ----- > > > > From: kblocat > > > > To: [email protected]<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]
