Uso Básico
Executando grep
grep "pattern" file.txt # search in file grep "error" *.log # search multiple files grep "hello" file1.txt file2.txt # explicit file list cat file.txt | grep "pattern" # pipe input dmesg | grep -i "usb" # filter command output
Flags Comuns
-iCorrespondência sem diferença de maiúsculas/minúsculas
-vInverter correspondência — imprimir linhas não correspondentes
-cImprimir contagem de linhas correspondentes
-nMostrar números de linha
-lListar apenas nomes de arquivos com correspondências
-LListar nomes de arquivos sem correspondências
-wCorresponder apenas palavras inteiras
-xCorresponder apenas linhas inteiras
Padrões Regex
Expressões Regulares Básicas (BRE)
.Qualquer caractere único
*Zero ou mais do elemento anterior
^Início de linha
$Fim de linha
[abc]Classe de caractere — qualquer a, b ou c
[^abc]Classe negada — qualquer coisa exceto a, b, c
[a-z]Faixa — letras minúsculas
\<, \>Limites de palavra (GNU)
\( \), \1Grupo de captura e retroreferência
Exemplos BRE
grep '^#' file.conf # lines starting with # grep 'error$' file.log # lines ending with error grep '^$' file.txt # blank lines grep 'col[ou]r' file.txt # match color or colour
Regex Estendida
Expressões Regulares Estendidas (ERE)
+Um ou mais do elemento anterior
?Zero ou um do elemento anterior
{n}Exatamente n repetições
{n,m}Entre n e m repetições
(a|b)Alternância — corresponder a ou b
( )Agrupamento (sem barra invertida necessária)
Exemplos ERE
grep -E '[0-9]{3}-[0-9]{4}' f # phone number pattern grep -E '(error|warn|fatal)' f # multiple patterns grep -E '^[A-Z][a-z]+' f # capitalized words grep -P '\d{1,3}\.\d{1,3}' f # Perl regex: IP fragments
Linhas de Contexto
Exemplos de Contexto
grep -B 3 "error" app.log # 3 lines before match grep -A 5 "FAIL" test.log # 5 lines after match grep -C 2 "crash" kern.log # 2 lines before and after grep --group-separator="---" -C 1 "err" f # custom separator
Flags de Contexto
-B NMostrar N linhas antes de cada correspondência
-A NMostrar N linhas após cada correspondência
-C NMostrar N linhas antes e depois (contexto)
--group-separator=strSeparador entre grupos de correspondência (padrão --)
--color=autoDestacar correspondências no terminal
Busca Recursiva
Exemplos Recursivos
grep -r "TODO" . # recursive from current dir grep -rn "FIXME" src/ # recursive with line numbers grep -r --include="*.py" "import" . # only .py files grep -r --exclude="*.log" "error" . # skip .log files grep -r --exclude-dir=node_modules "require" .
Flags Recursivas
-r / --recursiveBuscar diretórios recursivamente
-RComo -r mas segue links simbólicos
--include=globBuscar apenas arquivos que correspondem ao glob
--exclude=globPular arquivos que correspondem ao glob
--exclude-dir=dirPular diretórios que correspondem ao nome
--include-dir=dirBuscar apenas diretórios que correspondem ao nome
Contagem e Listagem
Exemplos de Contagem e Listagem
grep -c "error" *.log # count matches per file grep -l "TODO" src/*.py # list files with TODOs grep -L "test" src/*.py # files missing "test" grep -o "http[^ ]*" page.html # extract matching parts only grep -c '' file.txt # count total lines (like wc -l)
Flags de Saída
-cImprimir contagem de linhas correspondentes por arquivo
-lImprimir apenas nomes de arquivos com correspondências
-LImprimir apenas nomes de arquivos sem correspondências
-oImprimir apenas as partes correspondentes das linhas
-H / -hMostrar / ocultar prefixo do nome de arquivo
-ZSaída delimitada por null (para xargs -0)
Correspondência Inversa
Inverter e Excluir
grep -v "^#" config.conf # remove comment lines grep -v "^$" file.txt # remove blank lines grep -v -e "debug" -e "trace" app.log # exclude two patterns grep -v "pattern" f | grep "other" # chain: NOT A, then B
Estratégias de Filtragem
-vInverter correspondência — selecionar linhas não correspondentes
-v with -eExcluir múltiplos padrões
pipe chainEncadear chamadas grep para filtragem complexa
grep -v '^$' | grep -v '^#'Remover linhas em branco e comentários
-v with -cContar linhas não correspondentes
Múltiplos Padrões
Exemplos de Múltiplos Padrões
grep -e "error" -e "warning" app.log grep -E "error|warning|fatal" app.log grep -f patterns.txt file.txt # patterns from file grep -w -e "GET" -e "POST" access.log
Opções de Padrão
-e patternEspecificar um padrão (usar múltiplas vezes)
-f fileLer padrões de arquivo (um por linha)
-E 'a|b|c'Alternância ERE para múltiplos padrões
-FStrings fixas — sem regex, correspondência mais rápida
-GRegex básica (modo padrão)
-PRegex compatível com Perl (PCRE)
Performance
Dicas de Performance
-F (fgrep)Modo de string fixa — mais rápido para strings literais
LC_ALL=C grepIgnorar locale para aumento de 2-10x em dados ASCII
--include/--excludeReduzir arquivos pesquisados antes de abrir
-m NParar após N correspondências por arquivo
-qModo silencioso — sair na primeira correspondência (para scripts)
ripgrep (rg)Substituto drop-in; mais rápido em repositórios grandes
Exemplos de Performance
LC_ALL=C grep -F "exact string" huge.log grep -r -m 1 "needle" /var/log/ # stop after first hit grep -rq "pattern" . && echo "found" # boolean test grep -r --include="*.go" "func main" .
Padrões Comuns
One-Liners
grep -rn "TODO\|FIXME\|HACK" src/ # find code markers grep -oP '(?<=")[^"]+(?=")' f # extract quoted strings grep -E '^\s*$' f | wc -l # count blank lines grep -c '' *.py | sort -t: -k2 -rn # sort files by line count grep -rn --include="*.yaml" "password" . # audit for secrets
Receitas
IP addressesgrep -oE '[0-9]{1,3}(\.[0-9]{1,3}){3}'
Email addressesgrep -oE '[a-zA-Z0-9._%+-]+@[a-z.-]+'
URLsgrep -oE 'https?://[^ ]+'
Lines between markersgrep -A999 'START' f | grep -B999 'END'
Unique matchesgrep -oE 'pattern' f | sort -u
Count per patterngrep -c 'pat1' f; grep -c 'pat2' f