101 · LPIC-1 (parte 1)
103.7 Pesquisar usando expressões regulares
TópicoT16ObjetivoPesquisar em texto e ficheiros usando expressões regulares e o comando grepPeso2PáginasLPIC-1 (101) - Version 5.0
Resumo Conciso
Conceitos de expressões regulares
| Símbolo | Significado |
|---|---|
. | Qualquer caractere (exceto quebra de linha) |
* | Zero ou mais vezes (pode não haver nenhuma ocorrência) |
.* | Qualquer caractere qualquer número de vezes |
^ | Início da linha |
$ | Fim da linha |
\b | Delimitador de palavra |
\d | Qualquer dígito |
\w | Caractere de palavra (letra, número ou _) |
\ | Escapa caracteres especiais |
[0-9] | Qualquer dígito (intervalo) |
[^0-9] | Qualquer coisa que não seja dígito |
[a-z] | Qualquer letra minúscula (intervalo) |
| | OU lógico |
Comandos de pesquisa
| Comando | Descrição |
|---|---|
grep | Pesquisa em ficheiros e saídas |
-c | Retorna número de linhas correspondentes |
-i | Ignora maiúsculas/minúsculas |
-l | Retorna apenas nomes de ficheiros |
-n | Mostra números das linhas |
-r | Pesquisa recursivamente em directórios |
-v | Inverte a correspondência (não correspondência) |
-E | Usa expressão regular estendida |
-P | Usa expressão regular Perl |
Usando grep
grep "root" /etc/passwd # Busca "root" em ficheirogrep -c "bash" /etc/passwd # Conta ocorrênciasgrep -i "error" /var/log/syslog # Ignora maiúsculasgrep -r "iptables" /etc/ # Busca recursivagrep -n "root" /etc/passwd # Mostra número da linhagrep -v "^#" /etc/ssh/sshd_config # Remove comentáriosgrep -E "^[A-Z].*:" mypasswd # Regex estendidaUso no pipe
ls -l | grep "\.conf$" # Ficheiros .confcat /var/log/auth.log | grep -i "fail"cat /etc/passwd | grep -c "bash"ls -la | grep -v "^d" | grep -v "^t"Operadores lógicos em expressões
# OU (alternativa com pipe ou grep -E)grep -E "cavalo|gato|coelho" animals.txt# Qualquer dígito de 1 a 3 vezesgrep -E "[0-9]{1,3}" ficheiro.txtPesquisa em directórios inteiros
grep -r "password" /home/john/Resumo visual de metacaracteres
| Metacaractere | Descrição |
|---|---|
. | Qualquer caractere |
* | Zero ou mais vezes |
^ | Início da linha |
$ | Fim da linha |
\b | Delimitador de palavra |
\d | Qualquer dígito |
\w | Caractere de palavra |
[0-9] | Qualquer dígito |
[^0-9] | Qualquer coisa que não seja dígito |
| | OU lógico |
Exercícios Guiados
-
Pesquisar e contar ocorrências:
$ grep -c "bash" /etc/passwd -
Pesquisar com pipe:
$ cat /etc/passwd | grep -c "bash" -
Pesquisar com regex:
$ grep -E "^[A-Z].*:" mypasswd | wc -l -
Pesquisa recursiva:
$ grep -r "password" /home/john/ -
Pesquisar com delimitadores:
$ grep -E "^[A-Z].*:" mypasswd | cut -d: -f5 | cut -d, -f1
Exercícios Exploratórios
- Pesquisar erros em logs:
$ $ grep -i "error" /var/log/syslog | head -20- Pesquisar por IP em logs:
$ $ grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" /var/log/auth.log | head -5- Pesquisar por número de telefone:
$ $ grep -E "^[0-9]{3}-[0-9]{4}$" telefones.txt- Pesquisar por e-mail:
$ $ grep -E "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$" emails.txt- Pesquisar por data:
$ $ grep -E "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" datas.txt