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