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: MrBiTs
Subject: Re: [shell-script] substituicao de texto
Date: Sun, 28 Aug 2005 07:38:27 -0300

> crio uma variavel:
> var="`cat arquivo.txt`"

Primeiro erro. Você não está criando uma variável, e sim um vetor ( array ) que 
contém todos os elementos do arquivo.txt. Embora echo $var retorne a você 
teste10 teste11 teste12, você esqueceu-se que cada linha do arquivo.txt possui 
um caracter de final de linha.

> se o arquivo.txt tiver uma palavra só.. tipo TESTE, o sed abaixo funciona.. > 
> Mas se o arquivo.txt tiver varias linhas como:
> teste10
> teste11
> teste12
> O comando nao funciona..
> sed -e 's/<\/teste>/'${var}'/g' teste.txt > saida 
> sed -e "s/<\/teste>/${var}/g" teste.txt > saida 

sed somente funciona para substituir UMA expressão por OUTRA expressão. Na sua 
lógica, você quer que o sed receba uma frase "isso é um teste de sed" e a 
substitua por "isso é um teste 10 teste11 teste12 de sed" ou então que ele crie 
do nada duas outras frases, ficando algo como
"isso é um teste10 de sed"
"isso é um teste11 de sed"
"isso é um teste12 de sed"

Visualisando o seu problema:
$ cat -vet arquivo.txt
teste10$
teste11$
teste12$

$ cat arq2.txt
isso e um teste de sed

Habitue-se a utilizar variáveis maíusculas em shell script. Você não corre o 
risco de utilizar um comando interno ou externo como variável.

$ VAR=$(cat arquivo.txt)

$ echo $VAR
teste10 teste11 teste12

$ set -x
$ sed -e "s/teste/$VAR/g" arq2.txt
+ sed -e 's/teste/teste10
teste11
teste12/g' arq2.txt
sed: -e expression #1, char 15: unterminated `s' command

$ set +x

Pronto. Tudo explicado. O array VAR possuí, além dos valores, o caracter de 
final de linha. Agora, vejamos o que acontece aqui:

$ VAR="teste10 teste11 teste12"
$ set -x
$ sed -e "s/teste/$VAR/g" arq2.txt
+ sed -e 's/teste/teste10 teste11 teste12/g' arq2.txt
isso e um teste10 teste11 teste12 de sed
$ set +x

Em grandes linhas, a diferença do VAR alimentado pelo cat e do VAR alimentado 
pela string é o separador. 

Você precisa implementar um laço aí.


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



reply via email to

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