Renato, Eu para editar os virtualhost, usei o Include do apache.
Assim dentro do httpd.conf fica apenas uma chamada para o arquivo de configuração de um dominio. Para remover, eu retiro a linha do Include dentro do httpd.conf e apago o arquivo que contem o virtualhost do dominio. O meu está assim: No final do arquivo httpd.conf padrão. Include /etc/httpd/conf/sites.conf Dentro do arquivo sites.conf Include /etc/httpd/conf/vhosts/xxxxturbo.com.br Include /etc/httpd/conf/vhosts/xxxxxxbrasil.net Include /etc/httpd/conf/vhosts/ixxxxtro.com.br Include /etc/httpd/conf/vhosts/xxxrk.com.br E dentro de cada arquivo, o virtualhost de cada dominio. Para apagar fica muito fácil. #remove site do apache rm -f /etc/httpd/conf/vhosts/$1 grep -E -v '(^|[^._[:alnum:]])'$1'([^._[:alnum:]]|$)' /etc/httpd/conf/sites.conf > /etc/httpd/conf/sites2.conf cp /etc/httpd/conf/sites.conf /etc/httpd/conf/sites.conf-bk mv /etc/httpd/conf/sites2.conf /etc/httpd/conf/sites.conf /sbin/service httpd reload Com isso, você não tem risco de ficar editando o httpd.conf. []'s Alexandre Gorges http://algorges.blogspot.com MSN/Gtalk/iCHAT/Skype/Jabber: [email protected] From: Renato de Oliveira Diogo <[email protected]> Reply-To: <[email protected]> Date: Mon, 5 Jan 2009 16:11:41 -0200 To: <[email protected]> Subject: Re: [shell-script] Remoção de um bloco de texto de um arquivo Olá pessoal então, diretamente com o sed eu não sei trabalhar... Agora desenvolvi um laco em que eu pego as linhas de inicio e fim do bloco, aí com o sed ficaria mais facil.... vejam abaixo: === COUNT=0; MARK=0; while read L; do let COUNT++; if [ "$L" == '<VirtualHost *:80>' ]; then LI=$COUNT; elif [ "$L" == '</VirtualHost>' -a "$MARK" == 1 ]; then LF=$COUNT; break; elif [ "$L" == "ServerName subdominio.dominio.com.br" ]; then MARK=1; fi done < teste.txt === Agora tenho duas variáveis: LI que tem o número da linha onde inicia o bloco; LF que tem o número da linha onde termina o bloco. Com isto bastaria dar === if [ $MARK == 1 ] then sed -i '$LI,$LFd' texte.txt fi === Agora o problema é que como a string está fechada com aspas simples, o shell não está convertendo a variável para o número. Como eu resolveria isso? []s ________________________________________________ Renato de Oliveira Diogo Bacharel em Ciência da Computação UNESP - Bauru LPIC1 - Linux Professional Institute Certification - Nível 1 [email protected] <mailto:renato.diogo%40gmail.com> [email protected] <mailto:renato.diogo%40yahoo.com.br> 2009/1/5 jimmy <[email protected] <mailto:ronaldo_tgz%40yahoo.com.br> >: > 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] <mailto:suporte%40ns.net.br> >> 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] <mailto:suporte%40ns.net.br> >> 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] <mailto:renato.diogo%40gmail.com> >> [email protected] <mailto:renato.diogo%40yahoo.com.br> >> >> ------------------------------------ > > 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. > [As partes desta mensagem que não continham texto foram removidas]
