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 [email protected] [email protected] 2009/1/6 jimmy <[email protected]>: > 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 >> >> [email protected] >> [email protected] >> >> >> >> 2009/1/5 jimmy <[email protected]>: >> > 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 [email protected] >> >> >> 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 [email protected] >> >> >> 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 >> >> >> >> >> >> [email protected] >> >> >> [email protected] >> >> >> >> >> >> ------------------------------------ >> >> >> >> >> > >> >> > 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. >> >> > >> >> > ------------------------------------ >
