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

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

Re: Echoar da Linha Tal até linha Tal


From: voyeg3r
Subject: Re: Echoar da Linha Tal até linha Tal
Date: Thu, 25 Sep 2008 16:05:29 -0000
User-agent: eGroups-EW/0.82

--- Em address@hidden, "Fabiano Caixeta Duarte"
<fcd.listas@...> escreveu
>
> 2008/9/24 Elias Andrade <esan_br@...>
> 
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> >
> >        Pessoal,
> >
> >        Estou com uma dificuldade tremenda.
> >        Preciso pegar um bloco do virtual do apache, do qual tem
centenas de
> > virtuais, e separar para vários arquivos:
> >
> > <VirtualHost *>
> > DocumentRoot /www/vdomains/www.lalalala.com.br/html
> > ServerName www.lalalala.com.br
> > ServerAlias lalalala.com.br
> > ErrorLog /www/logs/www.lalalala.error.log
> > CustomLog /www/logs/www.lalalala.access.log common
> > </VirtualHost>
> >
> >        De inicio, rolei um for, coisa mais linda do mundo:
> >
> >        for i in `grep ServerName virtual.txt`; do grep -A4 -B2 "$i"
> > virtual.txt > /etc/apache2/sites-available/`echo "$i"|sed s/www.//`;
> > done
> >
> >        Maravilha! POrém, ele funciona perfeito apenas para os
blocos que
> > tenho
> > com 7 linhas. A grande zica é que tem blocos de virtual,com permissões
> > meio X, com N linhas.
> >
> >        Acredito que a saída seria rolar um awk ou um sed, pedindo
pra ecoar
> > da
> > linha  "<VirtualHost *>" até a linha "</VirtualHost>".
> >
> >        Alguém tem alguma idéia da sintaxe?
> >
> >        Agraço desde já.
> >
> >        Att.,
> 
> 
> Não entendi nada. Dá pra reformular?
> 
> E, de preferência, colocar um arquivo de exemplo como origem e o
resultado
> do filtro que você quer.
> 
> -- 
> Fabiano Caixeta Duarte
> Especialista em Redes de Computadores
> Linux User #195299
> Ribeirão Preto - SP
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>

vou dar um exemplo que creio, talvez lhe dê uma luz

Obs: crie um backup antes assim:

  cp /caminho/para/o/arquivo{,.backup}

  sed -i '/^comeco/,/^fim/!d' /caminho/para/o/arquivo

A opção "-i" do sed evita que ele destrua o arquivo
uma vez que o sed abre o destino antes da origem o que lhe daria um
fatídico arquivo vazio, e isso evita também ter que ficar criando
arquivos temporários.

  no sed você pode indicar intervalos assim:

    /comeco/,/fim/

onde os trechos começo e fim podem conter expressões regulares, no
caso acima /^comeco/ corresponde ao começo de linha "^"

A opção !d diz ao sed:  Amado Sed não apague o intervalo citado, ou
seja apague todo o resto.

Aplicando à sua situação só falta dizer se o asterisco 
dentro de "<VirtualHost *>" é literal ou não, se for você tem que
escapa-lo assim: <VirtualHost \*>

Mas se quizer casar qualquer combinação possível dentro da tag
terá que fazer algo assim:

  /<VirtualHost[^>]*>/

   [^>]*>  ..... isso diz ao sed tudo dentro da tag menos >









reply via email to

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