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"
