[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 >