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

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

Re: Remoção de um bloco de texto de um arquivo


From: marlon_mca
Subject: Re: Remoção de um bloco de texto de um arquivo
Date: Mon, 05 Jan 2009 18:35:54 -0000
User-agent: eGroups-EW/0.82

   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 address@hidden, "Renato de Oliveira Diogo"
<renato.diogo@...> 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.diogo@...
> renato.diogo@...
> 
> 
> 
> 2009/1/5 jimmy <ronaldo_tgz@...>:
> > 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 suporte@...
> >> 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 suporte@...
> >> 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.diogo@...
> >> renato.diogo@...
> >>
> >> ------------------------------------
> >
> > 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]