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: Tue, 6 Jan 2009 10:00:49 -0200

Opa Jimmy e Alexandre

essa configuração que estou fazendo eu adotei uma estrutura um pouco
diferente, para justamente não ficar mexendo diretamente no
httpd.conf.

No httpd.conf, eu coloquei um include da seguinte forma:
===
Include /etc/httpd/vhosts.enabled/*.vhost
===

E dentro do diretório /etc/httpd/vhosts.enabled/ existe um arquivo por dominio:
===
/etc/httpd/vhosts.enabled/dominio.com.br.vhost
===

é neste arquivo em que estou aplicando esse script.
Em alguns dominios pode existir subdominios (dependendo do projeto), e
eu não queria ficar criando um arquivo acima para cada subdominio para
não poluir muito o diretorio.

Grato
________________________________________________
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/6 jimmy <address@hidden>:
> tem 2 caminhos diferentes para isso:
>
> - você pode usar aspas em vez do apóstrofo, mas é preciso tomar
> cuidado com a expansão do shell, principalmente se for usar a
> negação do sed "!"; ex.:
> old=s
> new=string
> echo s | sed "s/$old/$new/"
>
> - ou fazer um mesclado com aspas e apóstrofos:
> echo s | sed 's/'"$old"'/'"$new/"''
>
> li a sugestão dada pelo alexandre gorges e pelo menos para mim pareceu a
> maneira mais adequada de resolver o seu problema.
>
> On Mon, Jan 05, 2009 at 06:32:36PM -0200, Renato de Oliveira Diogo wrote:
>> 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]