Na verdade.. nesse caso o redirecionamento é desnecessário, pois o grep já espera o nome do arquivo, ou seja:
$ grep "linha 2" texto.txt Ao rapaz que abriu a thread, que eu já nem sei mais quem é.. Quando dizemos que um comando vai ler da stdin (entrada padrão), quer dizer que um fluxo pode ser redirecionado pra ele e ele vai entender aquilo como entenderia se fosse um arquivo sendo aberto. Não só texto podemos fazer isso.. o "tar" é um exemplo classico disso. Quando usamos o "|" (pipe) para ligar dois comandos, o que estamos fazendo é jogando a saida de um como entrada de outro. Então veja: $ echo teste | tr 'e' 'X' tXstX $ tr 'e' 'X' teste # isso eu escrevi, direto na stdin tXstX # essa foi a resposta do "tr" de acordo com minha entrada anterior As duas coisas são identicas, a unica coisa que na primeira ao invés de eu escrever o texto, eu usei um redirecionamento pra incrementar a stdin. Mas o que acontece é que a stdin não fica mais esperando o NOME do arquivo, ela fica encarregada direto do fluxo de informações. Espero ter conseguido explicar, é um assunto bem basico mas chato de entender.. Qualquer coisa de uma lida nos "papo de botequim" do Julio Cesar, e nas paginas do www.aurelio.net ... Lá voce vai acabar entendendo na marra, se for o caso :). -- Flávio do Carmo Júnior On Dec 18, 2007 8:43 AM, Alan Diones <[EMAIL PROTECTED]> wrote: > > > > > > > amigos, evitem utilizarem "|" pipe, o exemplo abaixo poderia ter > resolvido assim: > grep "linha 2" < texto.txt > > o shell trabalha melhor assim. > Alan Diones > Em Ter, 2007-12-18 às 00:04 -0200, Arthur Renato Mello escreveu: > > Andre, > > > > "se [caminho do texto o qual será pesquisado] não for especificado, > > lê da entrada padrão", nao quer dizer que o grep espera o caminho do > > arquivo na entrada padrao, mas sim o texto propriamente dito. > > > > No exemplo: > > > > $ cat texto.txt > > linha 1 > > linha 2 > > linha 3 > > > > Se passarmos o caminho do arquivo no grep: > > > > $ grep "linha 2" texto.txt > > linha 2 > > > > Caso eu nao passe o caminho do arquivo, o grep ficara esperando que eu > > insira o texto na entrada padrao. Para encerrar a entrada eu uso > > Ctrl-D: > > > > $ grep "linha 2" > > texto.txt > > *Ctrl-D* (Nao o texto mas sim as teclas Ctrl + D :) > > > > Porem nesse caso o grep nao encontra nada, pois em "texto.txt" nao > > existe o padrao "linha 2". > > > > Mas nesse caso: > > > > grep "linha 2" > > linha 1 > > linha 2 > > linha 2 > > linha 3 > > *Ctrl-D* > > > > Eu digitei "linha 1" o que nao casa com o padrao, o grep nao faz nada. > > Porem, quando eu digito "linha 2", que casa com o padrao, e teclo > > Enter o grep automaticamente repete a linha. > > > > O uso do grep com textos da entrada padrao eh muito util para > > redirecionamentos. > > Como nesse caso INUTIL mas que exemplifica bem :) > > > > $ cat texto.txt | grep "linha 2" > > linha 2 > > > > Espero ter sido claro. E se cometi algum erro o pessoal da lista > > podera corrigir :D > > > > []s > > Arthur > > > > On Dec 17, 2007 10:35 PM, andre.andrade1 <[EMAIL PROTECTED]> > > wrote: > > > > > > > > > > > > > > > > > > > > > Me desculpem, pessoal, eu fui pouco claro. > > > A minha duvida, na realidade, refere-se a um comentário do livro do > > > julio neves(programação shell linux), 6 edição, pagina 24. > > > Ele fala mais ou menos isso: > > > A sintaxe do comando grep é: grep [-opçoes] [texto a ser procurado] > > > [caminho do texto o qual sera pesquisado] > > > e, está escrito mais ou menos isso: "se [caminho do texto o qual > > será > > > pesquisado] não for especificado, lê da entrada padrão". > > > Pelo que entendi, se eu der um "$grep -i palavra" e não especificar > > o > > > arquivo alvo do grep, o shell espera que eu coloque o caminho do > > > arquivo na stdin. Ao colocar o endereço do arquivo na stdin, como eu > > > sinalizo ao shell que eu já terminei de colocar o caminho para que o > > > grep seja executado? > > > > > > > > > > > > > > > >