Renato Digita esse comando no seu pronpt e verifica se é isso que vc quer,
sed '/<VirtualHost *:80>/,/</VirtualHost>/ d' arquivo_original.html > novoArquivo.html O comando acima vai remover tudo que estiver entre as palavras <VirtualHost *:80> e </VirtualHost> do arquivo "arquivo_original.html" e salvando as mudanças no "novoArquivo.html" sem mexer no arquivo original. Marlon V. Reck. --- Em [email protected], "Renato de Oliveira Diogo" <renato.di...@...> escreveu > > 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 > > renato.di...@... > renato.di...@... > > > > 2009/1/5 jimmy <ronaldo_...@...>: > > 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 supo...@... > >> 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 supo...@... > >> 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 > >> > >> renato.di...@... > >> renato.di...@... > >> > >> ------------------------------------ > > > > 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. > > >
