shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Re: Como sinalizo que um parametor, lido pela entrada


From: Flavio Junior
Subject: Re: [shell-script] Re: Como sinalizo que um parametor, lido pela entrada padrão, terminou?
Date: Tue, 18 Dec 2007 08:58:59 -0200

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 <address@hidden> 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 <address@hidden>
>  > 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?
>  > >
>  > >
>  >
>  >
>  >
>  >
>
>  


reply via email to

[Prev in Thread] Current Thread [Next in Thread]