segunda-feira, 3 de setembro de 2012

Aplicando OU, E e NÃO no comando grep

Em um ambiente Linux, é muito comum usarmos o comando grep para busca de palavras em arquivos de texto. O grep realiza a pesquisa linha a linha em busca de uma ou mais palavras informadas pelo usuário. A linha que conter a palavra, é retornada na saída padrão.

Combinando comandos e algumas opções do comando grep, podemos aplicar os conceitos dos operadores lógicos OU, E e NÃO em uma linha de comando. O grep possui opções que simulam os operadores OU e NÃO, o operador E pode ser simulado com o uso de canalização.


OU

A opção -e do comando grep pode ser usada para especificar múltiplas palavras-chave em uma mesma linha de comando. Como retorno, o grep exibe as linhas que contiverem uma ou mais palavras especificadas. É o efeito do operador lógico OU não exclusivo;

grep -e palavra1 -e palavra2 -e palavra3 arquivo.txt


E

O comando grep não possui opção que simule a operação E, porém podemos simular usando uma canalização. Para isto, realizamos a busca informando somente a primeira palavra e canalizando a saída para uma nova busca com a segunda palavra, assim sucessivamente. O retorno final serão as linhas que contiverem todas as palavras especificadas:

grep palavra1 arquivo.txt | grep palavra2 | grep palavra3


NÃO

A opção -v do comando grep pode ser usada para inverter o sentido da busca, serão retornadas as linhas que não contiverem a palavra especificada. É o efeito do operador lógico de negação:

grep -v palavra arquivo.txt


Podemos combinar os operadores lógicos para atuarem em uma mesma expressão de busca. A seguir algumas das combinações e suas respectivas descrições lógicas dos comandos de exemplo:


OU com NÃO

grep -v -e palavra1 -e palavra2 arquivo.txt

(busca por linhas que não contenham a palavra1 ou palavra2)


E com NÃO

grep palavra1 arquivo.txt | grep palavra2 | grep -v palavra3

(busca por linhas que contenham a palavra1 e palavra2 mas não contenham a palavra3)


E com OU

grep palavra1 arquivo.txt | grep -e palavra2 -e palavra3

(busca por linhas que contenham a palavra1 e a palavra2 ou palavra3)


Claro que existem as expressões regulares para gerar um padrão de busca, com o caractere | como operador OU etc. Entretanto não há, por exemplo, uma operação E eficiente sem usar o operador OU em conjunto. Creio que estas simples aplicações de comandos grep com canalizações e algumas opções possui um entendimento mais fácil. Se desejar, saiba mais sobre expressões regulares com o grep em http://dan-scientia.blogspot.com.br/2012/07/expressoes-regulares-com-o-grep_22.html

Nenhum comentário:

Postar um comentário