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: Renato de Oliveira Diogo
Subject: Re: [shell-script] Remoção de um bloco de texto de um arquivo
Date: Tue, 6 Jan 2009 10:22:41 -0200

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?

[]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]