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:30:01 -0200

Senhores

vejam se essa solução serviria para mim ou se tem algum problema com
ela... pelo teste que fiz funcionou,...
===
sed '/^$/{;N;/^\n$/D}' teste2.txt
===

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