+ Responder ao Tópico



  1. #1
    law
    Visitante

    Padrão shell

    PessoAll..

    o que estou tentando fazer é o seguinte.. tenho um arquivo.tmp e quero ler o conteudo deste arquivo e fazer um replace em uma determinada palavra....ex:

    um arquivo chamado texto.tmp com o conteudo:
    teste1
    teste2
    teste3

    eu quero trocar o teste2 por:
    arquivi texto_temp.tmp
    teste50 teste51 teste52

    fiz o seguinte:
    temp=$(cat texto_temp.tmp)
    e depois:
    /bin/sed -i.bak "s/teste2/$temp/g" texto.tmp

    só que a variável $temp não assume o valor do arquivo texto_temp para fazer o replace...

    se alguem puder dar uma dica agradeço..

    tks

  2. #2
    slice
    Visitante

    Padrão shell

    para declarar uma variável no shell, vc deve fazer o seguinte:

    temp="`cat file`"

    e depois usar ela como $temp tipo... echo $temp

    mas note que o sinal de cráse `comando` é que é o responsável por fazer com que seja executado o comando cat no arquivo file... sem isso, o valor será apenas uma string com o valor "cat file"...

    o outro problema é que se tiver 1, 2, 3, ..., n dados no arquivo file, o valor da variável será 1, 2, 3, ..., n e não um dado em específico...

  3. #3

    Padrão shell

    law,

    Seu comando está correto. Pelo menos testei no bash e funcionou.

    vinicius@slackware:~# sed "s/teste2/$temp/g" texto.tmp
    teste1
    teste50 teste51 teste52
    teste3

    Apresenta algum erro pra vc? Que shell vc usa?
    Tenta proteger a variavel com apostofre (em alguns shell ocorre problema parecido)

    Ou então assim:
    sed "s/teste2/${temp}/g" texto.tmp

    Abraços.

  4. #4
    law
    Visitante

    Padrão shell

    então..

    a variável é:
    teste="`cat temp.tmp`"

    e quando executo me retorna erro:

    $sed "s/<\/BLABLA>/$teste/g" saida.txt
    sed: -e expression #1, char 28: Unknown option to `s'

    $sed "s/<\/BLABLA>/${teste}/g" saida.txt
    sed: -e expression #1, char 28: Unknown option to `s'


    se eu conseguir executar a variavel no sed será massa.

    tks
    law