Juntar Comandos SED E GREP

1. Juntar Comandos SED E GREP

Renan
daekss

(usa Ubuntu)

Enviado em 23/05/2012 - 02:54h

Olá pessoal,

preciso fazer um programinha em C para linux com a seguinte idéia:

O usuario irá informar uma palavra que deseja procurar em algum arquivo, por exemplo um email antigo.
Depois ele irá informar a nova palavra para substituir essa antiga, como seu novo email seguindo o exemplo citado.

Creio que devo usar o grep pra localizar essa palavra, e o sed para substituíla.

Mas aí vem minha dúvida, como fazer ?
É possivel juntar os 2 comandos em um só ?

Obrigado !


  


2. Re: Juntar Comandos SED E GREP

Adriano Moreira da Silva
adri3d

(usa Arch Linux)

Enviado em 23/05/2012 - 09:48h

se é para fazer em c, mesmo que para Linux não acho correto usar comandos do s.o.

a ideia do exercício é que você crie seu próprio grep e sed, senão seria para fazer o programa em Shell Script envez da linguagem c


ex:
http://www.vivaolinux.com.br/artigo/Manipulando-arquivos-em-C-%28parte-1%29/
http://www.vivaolinux.com.br/artigo/Manipulando-arquivos-em-C-%28parte-2%29


3. Re: Juntar Comandos SED E GREP

Marcos Paulo Ferreira
daemonio

(usa Slackware)

Enviado em 23/05/2012 - 10:27h

Nesse caso só um sed bastaria:

sed 's/palavraantiga/palavranova/g'

Mas assim você não teria trabalho algum, pois o próprio sed já pesquisa no arquivo e substitui as palavras.

Em C, uma maneira é o prog ler palavra por palavra e compará-las com a palavra desejada. Utilize um arquivo temporário para armazenar o novo texto e assim que uma palavra "bater" na comparação, você salva a palavranova no lugar da palavraantiga.

t+


4. Re: Juntar Comandos SED E GREP

Renan
daekss

(usa Ubuntu)

Enviado em 30/05/2012 - 15:21h

Então pessoal, é que na verdade o meu comando em C tem que por obrigação ter uma chamada de sistema.

O que seria melhor para mim, é utilizar a chamada SED

no caso do exemplo:

system("sed -i 's/palavraantiga/palavranova/g' teste.txt");

eu consigo substituir a palavraantiga pela palavranova no arquivo teste.txt


O problema, é que ele só funciona se eu digitar essas palavras e o nome do arquivo diretamente nessa função system com o sed.

Se eu tento colocar através de uma variável, por exemplo:

int main()
{
char pantiga[40];
char pnova[40];
char nomearquivo[40];

gets(pantiga);
gets(pnova);
gets(nomearquivo);

system("sed -i 's/pantiga/pnova/g' nomearquivo");

}

ele nao funciona pessoal ! ele nao consegue ler o conteúdo dessas variáveis. ja tentei de várias formas, inclusive com ponteiros.

Alguem me sugere um jeito de fazer isso funcionar ?



5. Re: Juntar Comandos SED E GREP

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 30/05/2012 - 20:24h

Este seu programa nao pode ser totalmente feito em ShellScript?
Ja trabalhei com C por um tempo, mas faz mto tempo e nao me lembro de mta coisa..teria q pesquisar.
A chamada da sua variavel esta certa?
Uma dica, faca o programa exibir as variaveis na tela, soh pra constar que a chamada esta correta e na sequencia vc as utiliza no programa


6. Re: Juntar Comandos SED E GREP

Renan
daekss

(usa Ubuntu)

Enviado em 30/05/2012 - 23:36h

Então, ja tentei passar essas variaveis de todos os jeitos..

E sim, ele tem que ser feito em C, usando uma chamada de sistema.

não pode ser shell script :\






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts