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: jimmy
Subject: Re: [shell-script] Remoção de um bloco de texto de um arquivo
Date: Tue, 6 Jan 2009 09:50:49 -0200
User-agent: Mutt/1.4.2.3i

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]