shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] substituicao de texto


From: law
Subject: Re: [shell-script] substituicao de texto
Date: Mon, 29 Aug 2005 19:22:00 +0000 (GMT)

MrBits, 
estou copiando todo o grupo, estava só para um email.
seu comentário foi show de bola, aprendi a passar a perna no SED quando quero 
dar o replace de uma palavra para um texto grande. obrigado pela dica.
 
a solução ficou:

    VAR=$(sed -e "s/$/\\\n/g" $arq_sed | tr -d "\n")
    /usr/bin/chattr -i $NOME/.apache
    sed -e "s/<\/VirtualHost>/${VAR}/g" $NOME/.apache > arq_tmp
    sed '/^$/d' arq_tmp > saida
    /bin/cat saida > $NOME/.apache
    /usr/bin/chattr +i $NOME/.apache

  #limpeza
   rm $arq_sed
   rm arq_tmp
   rm saida

desta forma eu troquei uma palavra por um texto no arquivo. grato
 
law
Java rules

MrBiTs <address@hidden> escreveu:
Vamos lá. Vou fazer uns quotes para comentar cada passo seu. 
/*
1 linha=$(grep -n \<\/teste\> arquivo) > saida
2 while read linha
3 do
4    if  grep \<\/teste\> $linha > /dev/null
5    then
6        cat $var >> saida
7    else
8      echo "$linha" >> saida
9    fi
10 done < arquivo
*/
A construção da linha 1 é inútil. A variável linha recebe os valores dos 
números das linhas que contém a construção </teste>, mas vai morrer assim que 
você entrar no laço while. O arquivo saida não contém nada.
Dentro do laço, linha assume o valor da primeira linha do arquivo ( lala1, no 
seu exemplo ). O if grep não funciona já que grep trabalha com arquivos e linha 
é uma variável. var deve continuar sendo aquele seu vetor com os valores 
lala1$lele1$lili3.  
Feitos esses comentários:

/*
o que eu estou tentando fazer é substituir a palavra </teste> de um arquivo por 
um texto tipo:
lala1 
lele1
lili3
                            
pra isso tô tentando usar o loop acima mas tô apanhando demais..
var="`cat arquivo.txt`"
arquivo.txt
lala1
lele1
lili3
preciso montar um arquivo de:  
teste1
teste2
</teste>
teste3
teste4
</teste>
 
Para:

teste1
teste2
lala1 
lele1
lili3
teste3
teste4
lala1 
lele1
lili3
*/

$ sed -e "s/<\/teste>/lala1\nlele1\nlili3/g" teste.txt > saida.txt
teste1
teste2
lala1
lele1
lili3
teste3
teste4
lala1
lele1
lili3
 
Como você ainda vai querer jogar em uma variável o conteúdo do arquivo ( lala1, 
lele1, lili3 ), você precisa gerar uma VARIÁVEL que contenha uma única linha no 
formato que passamos para o sed. Então, digamos que:
 
$ VAR=$(sed -e "s/$/\\\n/g" arquivo | tr -d "\n")
Substituímos o caracter de final de linha de cada linha do arquivo pela STRING 
\n e eliminamos o caracter de final de linha que o sed automaticamente coloca. 
Então temos:
 
$ echo $VAR
lala1\nlele1\nlili3\n
 
Ainda temos o \n apos o lili3 que deveria ser eliminado, mas já avançamos 
bastante. Com isso, a construção sed -e "s/<\/teste>/$VAR/g" arquivo vai 
funcionar sem problemas.
 

                
---------------------------------
Yahoo! Acesso Grátis: Internet rápida e grátis. Instale o discador agora!

[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]