[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]
- Re: [shell-script] substituicao de texto,
MrBiTs <=