Pesquisa de site

Como realizar pesquisa de padrões em arquivos usando Grep


Nesta página

  1. Pesquisa que não diferencia maiúsculas de minúsculas com Grep
  2. Exibe certas linhas não correspondentes com a linha contendo a string correspondente no Grep
  3. Apenas imprimir strings correspondentes no Grep
  4. Mostrar posição no Grep
  5. Conclusão

Em nosso primeiro artigo sobre o comando grep, abordamos alguns recursos que a ferramenta oferece, incluindo como você pode usá-la para pesquisar apenas palavras, pesquisar duas palavras, contar linhas contendo a palavra correspondente e muito mais. Além disso, a ferramenta oferece alguns recursos mais fáceis de entender e úteis. Neste artigo, discutiremos alguns deles.

Observe que todos os exemplos mencionados neste tutorial foram testados no Ubuntu 14.04LTS. Além disso, usaremos o seguinte arquivo (test_file1.txt) para todos os nossos exemplos relacionados ao grep neste tutorial:

Pesquisa sem distinção entre maiúsculas e minúsculas com Grep

Por padrão, grep diferencia maiúsculas de minúsculas, o que significa, por exemplo, que tratará ABC e abc separadamente. No entanto, se você deseja que sua pesquisa não diferencie maiúsculas de minúsculas, você pode usar a opção de linha de comando -i.

grep -i [string-to-be-searched] [filename]

Por exemplo:

grep -i "linux" test_file1.txt

Observação: não apenas o padrão (por exemplo, linux no exemplo acima), a página de manual do grep diz que a opção -i também garante que a diferenciação de maiúsculas e minúsculas para arquivos de entrada também seja ignorada. Aqui está o trecho:

 -i, --ignore-case
Ignore case distinctions in both the PATTERN and the input files. (-i is specified by POSIX.)

No entanto, não foi possível reproduzir o comportamento relacionado aos arquivos de entrada de nossa parte.

Exibir certas linhas não correspondentes com a linha contendo a string correspondente no Grep

Usando a ferramenta, você também pode exibir um número especificado de linhas depois, antes ou ao redor da linha que contém a string correspondente.

Use a opção de linha de comando -A para imprimir N linhas após a linha correspondente.

$ grep -A N [string-to-be-searched] [filename]

Por exemplo:

$ grep -A 2 "linux" test_file1.txt

Aqui está a saída do comando acima

Da mesma forma, a opção de linha de comando -B é usada para exibir linhas antes da linha correspondente.

$ grep -B N [string-to-be-searched] [filename]

Por exemplo:

$ grep -B 2 "linux" test_file1.txt

Aqui está a saída:

Por fim, para imprimir linhas ao redor da linha correspondente, use a opção de linha de comando -C.

$ grep -C N [string-to-be-searched] [filename]

Por exemplo:

$ grep -C 2 "linux" test_file1.txt

Aqui está a saída capturada:

Imprimir apenas strings correspondentes no Grep

Você também tem permissão para imprimir apenas a string correspondente na saída padrão (em vez de linhas completas que são exibidas por padrão). Esse recurso pode ser acessado usando a opção de linha de comando -o.

$ grep -o [string-to-be-searched] [filename]

Por exemplo, se o requisito for pesquisar uma string \linux\ em um arquivo (mas linhas completas não devem ser impressas), usaremos o seguinte comando.

$ grep -o "linux" [file-name]

Também podemos usar caracteres curinga como * e .* para grep em mais de uma string. Por exemplo, se quisermos grep um grupo de palavras começando em \como\ e terminando em \linux\, podemos usar o seguinte comando.

$ grep -o “how.*linux” [file-name]

Posição de exibição no Grep

O comando grep também permite que você exiba o deslocamento de byte da linha na qual ocorre a string correspondente. Esse recurso pode ser acessado usando a opção de linha de comando -b. Mas para um melhor uso desta opção, você pode usá-la com a opção de linha de comando -o, que exibirá a posição exata da string correspondente.

$ grep -o -b [string-to-be-searched] [filename]

Por exemplo:

$ grep -o -b "for" test_file1.txt

Aqui está a saída:

Conclusão

Você pode não precisar de todas essas opções todos os dias, mas pelo menos deve conhecê-las, pois nunca sabe quando elas podem ser úteis. Grep se torna ainda mais poderoso quando usado com expressão regular, mas deixaremos esse tópico para outro dia.