Pular para o conteúdo principal

grep

O grep (Global Regular Expression Print) é uma ferramenta utilizada para pesquisa de textos, padrões ou expressões regulares dentro de arquivos ou fluxos de entrada (stdin). Ele imprime linhas que correspondem a uma expressão regular fornecida.


Pesquisa em Arquivo

Para pesquisar uma string dentro de um arquivo:

$ cat frutas.txt
banana
manga
uva
melancia
abacate

$ grep "manga" frutas.txt
manga
grep "/bin/bash" /etc/passwd

Também podemos fazer isso utilizando o stdout de outro comando e passar via stdin para o grep:

cat /etc/passwd | grep "/bin/bash"

Para exibir o número da linha onde a string foi encontrada:

$ grep "pesquisa" file -n
231 pesquisa

Podemos enviar o stdout do grep para algum arquivo:

cat /etc/passwd | grep "/bin/bash" > shell.txt
grep "/bin/bash" /etc/passwd > shell.txt

Exibir Linhas Adjacentes

Para exibir linhas acima do padrão desejado podemos utilizar o parâmetro -B (Before) seguido da quantidade de linhas que queremos exibir antes:

$ cat frutas.txt
banana
manga
uva
melancia
abacate

$ grep "manga" -B 1 frutas.txt
banana
manga

Para exibir linhas abaixo do padrão desejados podemos utilizar o parêmetro -A (After) seguido da quantidade de linhas que queremos exibir após:

$ grep "manga" -A 2 frutas.txt
manga
uva
melancia

Pesquisa Exata

Também podemos fazer pesquisa onde levará em questão a palavra completa e não somente um fragmento dela:

$ cat teste.txt
salada
salmão
sal

$ grep -w sal teste.txt
sal

Pesquisa em Multiplos Arquivos

Para pesquisar uma string em vários arquivos, basta passar mais de um arquivo como argumento:

grep "pesquisa" file1 file2

Eliminar Linhas

Com o grep também é possível eliminar linhas que contenham o padrão procurado e exibir o restante do conteúdo do arquivo passado como argumento:

grep -v "nologin" /etc/passwd

Mesmo exemplo utilizando stdin:

cat /etc/passwd | grep -v "nologin"

Filtro com Multiplas Strings

Há duas formas de fazer isso, a primeira é contatenando multiplos comandos de grep e outra é utilizando o comando grep -E ou egrep, uma variante descontinuada porém ainda funcional.

cat /etc/passwd | grep -v "nologin" | grep -v "/bin/false"
grep -v "nologin" /etc/passwd | grep -v "/bin/false"

No exemplo do egrep utilizamos o | para separar os padrões que desejamos pesquisar ou eliminar no stdout.

grep -v -E "nologin|/bin/false" /etc/passwd
egrep -v "nologin|/bin/false" /etc/passwd

Pesquisa Recursiva

É possível fazer uma pesquisa recursiva em um diretório:

grep -R "nologin"

Referências