Autor Tópico: Procurar num ficheiro e alterar - Bash Shell  (Lida 4794 vezes)

Offline Angiak

  • Usuário Ubuntu
  • *
  • Mensagens: 14
  • Ubuntu Karmic - 64bits
    • Ver perfil
Procurar num ficheiro e alterar - Bash Shell
« Online: 10 de MAR?O de 2010, 16:25 »
Boas a todos pessoal.
Não sei se ja existe resposta para isto mas não encontrei por isso aqui vai:

Estou a fazer um pequeno programa em bash shell e pouco ou nada percebo do assunto, neste momento gostaria que o programa ao ter num ficheiro de texto 2 linhas p.ex com:
->banana batatas couves
->coelho pato porco

Me fosse possivel identificar a linha correspondente por exemplo a palavra coelho e posteriormente alterar unica e exclusivamente essa palavra por uma outra.

Se alguem souber como se faz ou tenha link de algum tutorial que explique como fazer que diga por favor.
aceito qualquer ajuda

cumps e obrigado a todos
Angiak


"O mal do passado foi os homens tornarem-se escravos. O perigo do futuro é que eles se tornem robôs." Erich Fromm

Offline Roberto Ramos

  • Usuário Ubuntu
  • *
  • Mensagens: 82
    • Ver perfil
    • http://www.trincadeas.com.br
Re: Procurar num ficheiro e alterar - Bash Shell
« Resposta #1 Online: 10 de MAR?O de 2010, 16:38 »
Para procurar a palavra vc pode usar o comando "grep", abaixo segue o link com um bom tutorial sobre o comando:
http://olinux.uol.com.br/artigos/304/1.html


Para substituir a palavra por uma outra vc pode usar o comando "sed" pegando a saida do comando "grep" com um "|"(pipe) e executando o sed, segue abaixo um link para um tutorial de sed que tem uns exemplos:
http://olinux.uol.com.br/artigos/314/1.html

Leia os dois tutoriais que são continuação um do outro que vc aprenderá o que vc quer fazer, aconselho a ler todas as aulas desse artigo pois ajudará bastante a vc fazer seus script's shell's.

[]'s e espero ter ajudado... ;)

Offline clcampos

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 10.790
  • .:: User Linux #439596 ::.
    • Ver perfil
Re: Procurar num ficheiro e alterar - Bash Shell
« Resposta #2 Online: 10 de MAR?O de 2010, 16:40 »
Criei um arquivo teste com  as duas linhas do seu exemplo como conteúdo, e ai alterei a palavra coelho para cachorro usando a linha abaixo:

Citar
cat teste | grep coelho | sed  s/coelho/cachorro/g
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

Offline Angiak

  • Usuário Ubuntu
  • *
  • Mensagens: 14
  • Ubuntu Karmic - 64bits
    • Ver perfil
Re: Procurar num ficheiro e alterar - Bash Shell
« Resposta #3 Online: 10 de MAR?O de 2010, 16:53 »
Muito obrigado aos 2.

Criei um arquivo teste com  as duas linhas do seu exemplo como conteúdo, e ai alterei a palavra coelho para cachorro usando a linha abaixo:

Citar
cat teste | grep coelho | sed  s/coelho/cachorro/g
sim, realmente o  comando funciona, mas altera unicamente no terminal sendo que mantei o ficheiro original como estava, o que eu queria mesmo era que ele me permitisse alterar no ficheiro.
Como faço para isso acontecer

Edit:

Experimentei acrescentando ao comando anterior >>teste

no entanto, escrevemen uma nova linha
e não altera a anterior, ou seja fiquem com tres linhas

Cumps e obrigado
angiak
 
« Última modificação: 10 de MAR?O de 2010, 17:04 por Angiak »
"O mal do passado foi os homens tornarem-se escravos. O perigo do futuro é que eles se tornem robôs." Erich Fromm

Offline clcampos

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 10.790
  • .:: User Linux #439596 ::.
    • Ver perfil
Re: Procurar num ficheiro e alterar - Bash Shell
« Resposta #4 Online: 10 de MAR?O de 2010, 17:15 »
Pô dai é sua imaginação né.

Vamos lá:

Citar
#!/bin/bash
#
nomeArq="teste"   #Arquivo a alterar

# Informação a ser pesquisada e substituida
echo "Informe o nome a pesquisar"
read nPesq

# Nova informação para se colocar no lugar
echo "Informe o novo termo"
read nNovo

#Pesquisa do termo e troca pelo novo
novaLinha=`cat $nomeArq | grep $nPesq | sed s/$nPesq/$nNovo/g`

#Eliminando a linha atual
cat $nomeArq | grep -v $nPesq > /tmp/$nomeArq

# Acrescentando a nova linha
echo $novaLinha >> /tmp/$nomeArq

# Substituindo o arquivo velho pelo novo
mv /tmp/$nomeArq   $nomeArq

Agora não me vá usar o código acima, primeiro porque não testei, apenas digitei direto no tópico, segundo porque ele não faz nenhuma conferência, terceiro pq imagino que apenas uma linha vá combinar com o termo especificado.

O código é apenas para te mostrar que pode ser feito, basta você ter imaginação e conhecer os comandos.

Boa sorte, e antes que me esqueça, devem ter muitas outras formas para se fazer isso.

[]'s

Cristiano

editando: Acertei o script porque errei ao referenciar umas variáveis.
« Última modificação: 10 de MAR?O de 2010, 17:29 por clcampos »
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

Offline clcampos

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 10.790
  • .:: User Linux #439596 ::.
    • Ver perfil
Re: Procurar num ficheiro e alterar - Bash Shell
« Resposta #5 Online: 10 de MAR?O de 2010, 17:27 »
Putz... acho que eu gosto demais de shell script... vamos a outra forma, mais simples.

Citar
#!/bin/bash
#
nomeArq="teste"   #Arquivo a alterar

# Informação a ser pesquisada e substituida
echo "Informe o nome a pesquisar"
read nPesq

# Nova informação para se colocar no lugar
echo "Informe o novo termo"
read nNovo

#Pesquisa do termo e troca pelo novo
sed s/$nPesq/$nNovo/g` $nomeArq > /tmp/$nomeArq

# Substituindo o arquivo velho pelo novo
mv /tmp/$nomeArq   $nomeArq

De novo não vá usar o código acima, porque não testei, apenas digitei direto no tópico, segundo porque ele não faz nenhuma conferência, terceiro pq neste caso ele troca todas as ocorrências do termo pesquisado pelo novo termo,  só que ao menos mantem a ordem das linhas.

[]'s

Cristiano
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

Offline Angiak

  • Usuário Ubuntu
  • *
  • Mensagens: 14
  • Ubuntu Karmic - 64bits
    • Ver perfil
Re: Procurar num ficheiro e alterar - Bash Shell
« Resposta #6 Online: 12 de MAR?O de 2010, 14:58 »
muito obrigado CLcampos ja percebi a ideia, muito obrigado pela explicação e ajuda

Cumps
Angiak
"O mal do passado foi os homens tornarem-se escravos. O perigo do futuro é que eles se tornem robôs." Erich Fromm