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

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

[shell-script] Agradecendo


From: marlon_mca
Subject: [shell-script] Agradecendo
Date: Fri, 18 Jul 2008 20:04:24 -0000
User-agent: eGroups-EW/0.82


     Desculpa a demora, mas venho agradecer a todas da lista pelas
explicações e ajuda de todos na minha dúvida sobre o grep e a variável.

Obrigado
Marlon


--- Em address@hidden, "Tiago Barcellos Peczenyj"
<tiago.peczenyj@...> escreveu
>
> Marlon
> 
> o grep faz pesquisas *apenas* em fluxos de dados, ou seja, em arquivos
> ou na entrada padrão
> 
> Se eu fizer isso (grep ana) e escrever "oi, boi e banana" em linhas
> separadas, o grep vai repetir a palavra banana, pois o programa
> encontrou uma ocorrência de "ana"
> 
> $ grep ana
> oi
> boi
> banana
> banana # esse o grep repete!!!
> 
> se vc tem uma string, ou seja, uma referência textual que *não* está
> em arquivo (como um texto literal ou o conteudo de uma variavel) vc
> tem varias opções:
> 
> 1) posso criar um arquivo temporario com o texto banana
> 
> $ echo "banana" > /tmp/arquivo
> $ grep ana /tmp/arquivo
> 
> 2) passar via stdin com um pipe ou redirecionamento (eliminando
> escrita em disco)
> 
> $ echo "banana" | grep ana
> -- ou --
> $ grep ana < /tmp/arquivo
> 
> 3) posso criar um named pipe com o conteudo "banana"
> 
> $ grep ana <(echo "banana")
> 
> 4) posso usar here document
> 
> $ grep ana <<PINDAMONHANGABA
> banana
> PINDAMONHANGABA
> 
> 5) posso usar here strings
> 
> $ grep ana <<< "banana"
> 
> Perceba como as opções 1, 3 e 5 são semelhantes. O Bash oferece a
> opção 5 como algo extremamente limpo (evitando um echo + caracteres
> dificeis) do que as demais opções e vc está no shell pai em todas as
> opções, exceto a numero 2.
> 
> Compreendido isso, agora vc precisaria estudar um pouco sobre exit
> codes para compreender comandos encadeados como
> 
> $ ./configure && make && make install
> 
> O que pode ser feito com este exemplo
> 
> true && echo "sucesso $? " || echo "falha $?"
> false && echo "sucesso $? " || echo "falha $?"
> 
> true e false são 2 comandos que simplesmente fazem um exit com codigo
> 0 ou 1. Se for 0 vc pode interpretar como saiu com sucesso, caso
> contrario ocorreu uma falha.
> 
> pratique um pouco estes conceitos que vc domina. Shell é assim,
> algumas ferramentas demoram pra 'cair a ficha' como o xargs e o find,
> mas depois são extremamente uteis no dia a dia em um sistema
> operacional decente :)
> 
> 
> 2008/7/13 Marlon Vagner Reck <marlon_mca@...>:
> >
> > Obrigado a todos
> >
> > A parte do && e do grep -qs eu tinha entendido, minha dúvida é
como ele
> > conseguiu fazer o grep procurar uma palvra dentro de outra sem
esta estar em
> > um arquivo e sim em uma váriavel ou no final de um comando mas com
a ajuda
> > do
> > Julio C. Neves eu entendi, agora o que me perturba é o comando do
Julio (
> > rindo de mim mesmo por não entender os comandos ):
> >
> > grep -qs $1 <<< "$2" && echo "$1 está contida em $2"
> >
> > a parte que não entendi é o que os " <<< " fazem de diferente de
apenas um "
> > < " , as váriaveis não estão todas no mesmo shell ?
> >
> > Em Sunday 13 July 2008 21:18:51 Julio C. Neves escreveu:
> >> Fala Marlon,
> >> a opção -q (quiet) do grep serve para não jogar na stdout a linha
em que
> >> existia a cadeia
> >>
> >> $ grep ^root /etc/passwd && echo achei
> >> root:x:0:0:root:/root:/bin/bash
> >> achei
> >> $ grep -q ^root /etc/passwd && echo achei
> >> achei
> >>
> >> a opção -s é para não mandar erro para a saída caso vc não tenha
direito
> >> de
> >> leitura ou o arquivo não exista (o grep não dá erro qdo não
encontra a
> >> cadeia pesquisada). Veja:
> >>
> >> $ grep julio nãoexiste
> >> grep: nãoexiste: Arquivo ou diretório inexistente
> >> $ grep -s julio nãoexiste
> >> $
> >>
> >> Então a opção -qs significa silêncio total e stdout e stderr.
Experimente
> >> tb fazer assim:
> >>
> >> # passando parâmetros para o shell corrente
> >> $ set - ana banana
> >> # Será que funcionou?
> >> $ echo $0
> >> bash
> >> $ echo $1
> >> ana
> >> $ echo $2
> >> banana
> >> # Blz! Então vamos ao que interessa
> >> $ grep -qs $1 <<< "$2" && echo "$1 está contida em $2"
> >> ana está contida em banana
> >>
> >> Assim vc escreve menos e é um pouquinho mais rápido pq não tem
pipe para
> >> fazer fork do shell
> >> --
> >> Abraços,
> >> Julio
> >> Em setembro estarei dando um treinamento
> >> Shell em Brasília (em 2 fins de semana).
> >> Mais informações: www.tecnologiabr.com.br
> >> Tel: (61) 3354-3162
> >>
> >> 2008/7/13 Marlon Vagner Reck <marlon_mca@...>:
> >> > Amigos
> >> >
> >> > Comprei o livro "Shell script profissional " do Aurélio ( muito
bom por
> >> > sinal)
> >> > e me deparei com a seguinte linha:
> >> >
> >> > echo $2 | grep -qs $1 && echo "$1 está contida em $2"
> >> >
> >> > que pesquisa dentro de uma palavra a existência de outra,
exemplo ana
> >> > dentro
> >> > de banana. Só que eu não consegui entender de o funcionamento
dela, o
> >> > echo mostra a váriavel 2 digamos "banana" e joga no sub-shell
para que o
> >> > grep pesquise a váriavel 1 digamos "ana" dentro da palavra
"banana",
> >> > qual
> >> > a mecânica da coisa a lógica?
> >> >
> >> > Obrigado a todos
> >> > Marlon
> >
> > 
> 
> 
> 
> -- 
> Tiago B Peczenyj
> Linux User #405772
> 
> http://peczenyj.blogspot.com/
> "what does not kill us makes us stronger"
>




reply via email to

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