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

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

Re: [shell-script] Remoção de um bloco de texto de um arquivo


From: Renato de Oliveira Diogo
Subject: Re: [shell-script] Remoção de um bloco de texto de um arquivo
Date: Mon, 5 Jan 2009 18:32:36 -0200

Opa Jimmy

bom, coloquei a primeira forma que voce passou em uma única linha:
===
sed '/<VirtualHost
\*:80>/{:a;N;/<\/VirtualHost>/bb;ba;};:b;/ServerName
subdominio\.dominio\.com\.br/d' teste.txt
===
agora, dentro dessa forma, como eu poderia colocar uma variável do
shell para substituir partes dela... como por exemplo:
terei uma variável $SUBDOM que corresponde ao "subominio" e outra
variável $DOM que corresponde ao "dominio.com.br"

até substituir as aspas simples pelas duplas, e coloquei as variáveis:
sed "/<VirtualHost
\*:80>/{:a;N;/<\/VirtualHost>/bb;ba;};:b;/ServerName $SUBDOM\.$DOM/d"
teste.txt

Dos meus testes acontece o seguinte:
se DOM e SUBDOM estao corretos, o sed bate;
se SUBDOM está correto e DOM vazio, o sed bate (vou ter que testar a
variavel antes da execucao do sed);
se SUBDOM correto e DOM errado, o sed nao bate;
se SUBDOM errado e DOM correto, o sed nao bate;
se SUBDOM vazio e DOM correto, o sed nao bate;

Agradeço a ajuda de todos...

[]s
________________________________________________
Renato de Oliveira Diogo

Bacharel em Ciência da Computação
UNESP - Bauru

LPIC1 - Linux Professional Institute Certification - Nível 1

address@hidden
address@hidden



2009/1/5 jimmy <address@hidden>:
> bem simples essa forma, só atento para o detalhe de que a parte do
> "/dominio.com.br/d" deve ser colocado fora do último "}" caso se queira
> exibir na saída apenas o bloco que possui a expressão.
>
> sed '/<VirtualHost/{:a;/<\/VirtualHost/!{N;ba;}};/dominio.com.br/!d;'
>
> On Mon, Jan 05, 2009 at 04:43:19PM -0200, [DirectWeb] - Marcio wrote:
>>
>> Jimmy,
>>
>>
>> Eu tenho esse script pronto e utilizo essa linha do sed:
>>
>>
>> sed "/<VirtualHost/{:a;/<\/VirtualHost/!{N;ba;};/dominio.com.br/d;}"
>>
>>
>>
>> []s
>>
>>
>> Marcio
>>
>>
>> jimmy escreveu:
>> > On Mon, Jan 05, 2009 at 12:11:18PM -0200, Renato de Oliveira Diogo
>> > wrote:
>> >
>> >> Senhores, bom dia
>> >>
>> >> estou desenvolvendo um script que tem o intuito de remover um bloco de
>> >> texto. Um exemplo do arquivo abaixo:
>> >> ===
>> >> <VirtualHost *:80>
>> >> ServerAdmin address@hidden
>> >> DocumentRoot /var/www/vhosts/dominio.com.br/httpdocs
>> >> ServerName www.dominio.com.br
>> >> ServerAlias dominio.com.br
>> >> ErrorLog /var/www/vhosts/dominio.com.br/statistics/logs/error_log
>> >> CustomLog /var/www/vhosts/dominio.com.br/statistics/logs/access_log
>> >> common
>> >> CBandUser dominio
>> >> ...
>> >> ...
>> >> <IfModule mod_ssl.c>
>> >> SSLEngine off
>> >> </IfModule>
>> >> </VirtualHost>
>> >>
>> >> <VirtualHost *:80>
>> >> ServerName subdominio.dominio.com.br
>> >> ServerAdmin address@hidden
>> >> DocumentRoot
>> >> /var/www/vhosts/dominio.com.br/subdomains/subdominio/httpdocs
>> >> CustomLog /var/www/vhosts/dominio.com.br/statistics/logs/access_log
>> >> combined
>> >> ErrorLog /var/www/vhosts/dominio.com.br/statistics/logs/error_log
>> >> ...
>> >> ...
>> >> Options -Includes -ExecCGI
>> >> </Directory>
>> >> </VirtualHost>
>> >> ===
>> >>
>> >> O bloco que preciso remover inicia com <VirtualHost *:80> e termina
>> >> com seu fechamento </VirtualHost>.
>> >> Porém, pode haver mais de um bloco de texto que inicia e fecha com
>> >> estes. Para diferenciar, o bloco de texto deve conter "ServerName
>> >> subdominio.dominio.com.br"
>> >>
>> >> Sei que a remoção eu teria que fazer com o sed, porém como eu pego
>> >> essas linhas especificas que me complicou a vida.
>> >>
>> >> Alguem tem alguma ideia, que poderia me ajudar?
>> >>
>> >> []s
>> >> ________________________________________________
>> >> Renato de Oliveira Diogo
>> >>
>> >> Bacharel em Ciência da Computação
>> >> UNESP - Bauru
>> >>
>> >> LPIC1 - Linux Professional Institute Certification - Nível 1
>> >>
>> >> address@hidden
>> >> address@hidden
>> >>
>> >> ------------------------------------
>> >>
>> >
>> > saudações renato,
>> >
>> > não entendi muito bem o que você quis dizer com "remover um bloco de
>> > texto" se era para apagá-lo de dentro do arquivo ou para exibir somente
>> > esse bloco na tela, de qualquer forma aí vai um script simples, espero
>> > que lhe sirva:
>> >
>> > #!/usr/bin/sed -f
>> >
>> > /<VirtualHost \*:80>/ {
>> > :a;
>> > N;
>> > /<\/VirtualHost>/ bb;
>> > ba;
>> > };
>> > :b;
>> > /ServerName subdominio\.dominio\.com\.br/!d;
>> >
>> > se preferir junte todas as linhas numa só e execute diretamente da linha
>> > de comandos, os ";" já estão nos seus lugares.
>> >
>> > ------------------------------------
> 


reply via email to

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