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: Mon, 5 Jan 2009 16:11:41 -0200

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

address@hidden
address@hidden



2009/1/5 jimmy <address@hidden>:
> 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]