Ô 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]
