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 [email protected], "Tiago Barcellos Peczenyj" <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]>: > > > > 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 <[EMAIL PROTECTED]>: > >> > 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" >
