Linux - Comando grep: Buscando em Texto
O comando grep
realiza buscas em arquivos utilizando expressões regulares. Ele possui o seguinte formato:
grep [OPÇÕES] PADRÕES [ARQUIVO]
O argumento obrigatório PADRÕES
aceita o padrão de texto a ser encontrado. Se o argumento ARQUIVO
for fornecido, ele será usado como o arquivo onde a busca será realizada. O parâmetro opcional OPÇÕES
permite configurar a aplicação do padrão de busca.
Por exemplo, vamos encontrar o texto "127.0." no arquivo /etc/hosts
:
programicio@Programicio:~$ grep "127.0." /etc/hosts 127.0.0.1 localhost 127.0.1.1 Programicio
Outro exemplo é encontrar pastas e arquivos no diretório pessoal do usuário, cujos nomes começam com "Do":
programicio@Programicio:~$ ls ~ | grep "Do" Documents Downloads
Principais Elementos das Expressões Regulares:
^
: indica que a correspondência com o padrão deve estar no início da linha. Por exemplo, vamos encontrar linhas que começam com o símbolo "s":programicio@Programicio:~$ ls ~ | grep "^s" shell snap
$
: indica que a correspondência com o padrão deve estar no final da linha. Por exemplo, vamos encontrar todos os arquivos com a extensão "txt":ls ~ | grep "\.txt$"
.
: corresponde a qualquer caractere. Por exemplo, no diretório pessoal do usuário, se tivermos o arquivotest.txt
com o seguinte conteúdo:Tom Bob Sam Alice Kate Tim Tomas
Vamos encontrar todas as linhas que contêm "Tim" ou "Tom":
programicio@Programicio:~$ grep "T.m" test.txt Tom Tim Tomas
[]
: indica caracteres em uma expressão regular que devem ser interpretados como alternativas. Por exemplo, vamos encontrar todas as linhas que contêm "Tim" ou "Tom":grep "T[oi]m" test.txt
[^ ]
: indica que a correspondência com o padrão não deve conter os caracteres dentro dos colchetes. Por exemplo, vamos encontrar todas as linhas que não contêm "Tim" ou "Tom":grep "T[^oi]m" test.txt
-
: define um intervalo de caracteres que o caractere deve corresponder. Por exemplo, vamos encontrar todas as linhas que começam com um caractere numérico:grep "^0-9" test.txt
\
: permite escapar caracteres especiais. Por exemplo, o ponto.
é considerado um caractere curinga. No entanto, se precisamos especificar que o texto deve conter exatamente um ponto, devemos usar\.
. Por exemplo, vamos encontrar na pasta de downloads todos os arquivos com a extensãotar.gz
:ls ~/Downloads | grep "\.tar\.gz"
*
: indica que a expressão regular anterior pode ocorrer uma ou mais vezes, ou pode não ocorrer.?
: indica que a expressão regular anterior pode ocorrer uma vez ou pode estar ausente.+
: indica que a expressão regular anterior pode ocorrer uma ou mais vezes.{n}
: indica que o caractere anterior pode ocorrer no mínimo n vezes. Por exemplo, vamos encontrar linhas onde há duas letras "o" consecutivas:grep "o\{2\}" test.txt