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 10:38:32 -0200
User-agent: Mutt/1.4.2.3i

On Tue, Jan 06, 2009 at 10:22:41AM -0200, Renato de Oliveira Diogo wrote:
> Senhores
> 
> para finalizar este script, eu precisaria eliminar com sed, duplas
> linhas em branco ou mais ficando uma unica linha em branco no lugar.
> sed 's/^$\{2,\}/^$/g' teste2.txt
> tentei também
> sed '/^$/d' teste2.txt
> 
> alguma ideia?

sed '/^$/{:a;N;/[^\n]$/{s/\n\+/\n/g; bb};ba};:b'

mas não testei juntando esse ao outro script sed.

> 
> []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/6 Renato de Oliveira Diogo <address@hidden>:
> > 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
> >
> > address@hidden
> > address@hidden
> >
> >
> >
> > 2009/1/6 jimmy <address@hidden>:
> >> 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]