Linux Commands · 12 min read · Sep 12, 2025
Como usar grep para buscar strings em arquivos no shell Linux

O comando GREP no Linux - uma visão geral
O comando grep no Linux é uma poderosa ferramenta de busca de texto que permite aos usuários pesquisar em arquivos ou fluxos de texto por padrões específicos. Ele significa “ global regular expression print“ e suporta busca por strings de texto simples e expressões regulares mais complexas. O comando é frequentemente combinado com outros comandos para filtrar e refinar a saída. Por padrão, o grep retorna todas as linhas que contêm o padrão. No entanto, ele oferece várias opções para personalizar a busca, como sensibilidade a maiúsculas e minúsculas, contagem de ocorrências ou busca recursiva em diretórios. Isso o torna uma ferramenta essencial para administradores de sistema, desenvolvedores e qualquer pessoa que trabalhe com grandes conjuntos de dados em um ambiente semelhante ao Unix.
O comando grep é usado principalmente para pesquisar um texto ou arquivo por linhas que contêm uma correspondência com as palavras/strings especificadas. Por padrão, o grep exibe as linhas correspondentes e pode ser usado para pesquisar linhas de texto que correspondem a uma ou mais expressões regulares, e ele exibe apenas as linhas correspondentes.
Pré-requisitos
O comando grep é parte das utilidades básicas de qualquer distribuição Linux, portanto, ele vem pré-instalado por padrão no AlmaLinux, CentOS, Debian, Linux Mint, Ubuntu, RHEL e RockyLinux.
A sintaxe básica do comando grep
A sintaxe básica do comando grep é a seguinte:
grep 'word' filename
grep 'word' file1 file2 file3
grep 'string1 string2' filename
cat otherfile | grep 'something'
command | grep 'something'
command option1 | grep 'data'
grep --color 'data' fileNameComo usar o comando grep para buscar em um arquivo
No primeiro exemplo, vou buscar o usuário “tom” no arquivo passwd do Linux. Para buscar no arquivo /etc/passwd o usuário “tom”, você precisa inserir o seguinte comando:
grep tom /etc/passwdAbaixo está a saída de exemplo:
tom:x:1000:1000:tom,,,:/home/tom:/bin/bashVocê tem a opção de instruir o grep a ignorar a caixa das palavras, ou seja, corresponder abc, Abc, ABC e todas as combinações possíveis com a opção -i, conforme mostrado abaixo:
grep -i "tom" /etc/passwdUso recursivo do grep
Se você tiver um monte de arquivos de texto em uma hierarquia de diretórios, por exemplo, os arquivos de configuração do Apache em /etc/apache2/ e quiser encontrar o arquivo onde um texto específico está definido, use a opção -r do comando grep para fazer uma busca recursiva. Isso realizará uma operação de busca recursiva através dos arquivos para a string “197.167.2.9” (como mostrado abaixo) no diretório /etc/apache2/ e todos os seus subdiretórios:
grep -r "mydomain.com" /etc/apache2/Alternativamente, o seguinte comando pode ser usado:
grep -R "mydomain.com" /etc/apache2/Abaixo estão as saídas de exemplo para uma busca semelhante em um servidor Nginx:
grep -r "mydomain.com" /etc/nginx/
/etc/nginx/sites-available/mydomain.com.vhost: if ($http_host != "www.mydomain.com") {Aqui, você veria o resultado para mydomain.com em uma linha distinta precedida pelo nome do arquivo (por exemplo, /etc/nginx/sites-available/mydomain.com.vhost) em que foi encontrado. A inclusão dos nomes dos arquivos nos dados de saída pode ser facilmente suprimida usando a opção -h (como explicado abaixo): grep -h -R “mydomain.com” /etc/nginx/. Abaixo está a saída de exemplo:
grep -r "mydomain.com" /etc/nginx/
if ($http_host != "www.mydomain.com") {Usando grep para buscar apenas palavras
Quando você está buscando por abc, o grep corresponderá a todos os tipos de coisas, ou seja, kbcabc, abc123, aarfbc35 e muitas outras combinações sem obedecer aos limites das palavras. Você pode obrigar o comando grep a selecionar apenas aquelas linhas que contêm correspondências para formar palavras inteiras (aquelas que correspondem apenas à palavra abc), como mostrado abaixo:
grep -w "abc" file.txtExemplo:

Usando grep para buscar duas palavras diferentes
Para buscar duas palavras diferentes, você deve usar o comando egrep, como mostrado abaixo:
egrep -w 'word1|word2' /path/to/fileContar linhas para palavras correspondentes
O comando grep tem a capacidade de relatar o número de vezes que um padrão específico foi correspondido para cada arquivo usando a opção -c (contar) (como mostrado abaixo):
grep -c 'word' /path/to/fileAlém disso, os usuários podem usar a opção ‘-n’ precedendo cada linha de saída com o número da linha no arquivo de texto de onde foi obtido (como mostrado abaixo):
grep -n 'root' /etc/passwdAbaixo estão as saídas de exemplo:
1:root:x:0:0:root:/root:/bin/bash
Grep inverso
Os usuários podem usar a opção -v para imprimir a correspondência inversa, o que significa que corresponderá apenas àquelas linhas que não contêm a palavra dada. Por exemplo, imprima todas as linhas que não contêm a palavra par usando o seguinte comando:
grep -v par /path/to/fileComo listar apenas os nomes dos arquivos correspondentes
Você deve usar a opção -l para listar os nomes dos arquivos cujos conteúdos mencionam uma palavra específica, por exemplo, a palavra ‘primary’, usando o seguinte comando:
grep -l 'primary' *.cPor fim, você tem a opção de obrigar o grep a exibir a saída em cores específicas usando o seguinte comando:
grep --color root /etc/passwdAbaixo estão as saídas de exemplo:
Como fazer o comando grep lidar com múltiplos padrões de busca
Pode haver situações em que você queira buscar múltiplos padrões em um arquivo (ou conjunto de arquivos) dado. Nesses cenários, você deve usar a opção de linha de comando ‘-e‘ que o grep fornece.
Por exemplo, suponha que você queira buscar as palavras “how”, “to” e “forge” em todos os arquivos de texto presentes no seu diretório de trabalho atual, então aqui está como você pode fazer isso:
grep -e how -e to -e forge *.txtAqui está o comando em ação:
A opção de linha de comando ‘-e‘ também ajuda em cenários em que o padrão começa com um hífen (-). Por exemplo, se você quiser buscar por, digamos, “-how”, então o seguinte comando não será útil:
grep -how *.txtÉ quando você usa a opção de linha de comando -e que o comando entende o que exatamente você está tentando buscar neste caso:
grep -e -how *.txtAqui estão ambos os comandos em ação:
Como limitar a saída do grep a um número específico de linhas
Caso você queira limitar a saída do grep a um número específico de linhas, você pode fazer isso usando a opção de linha de comando ‘-m‘. Por exemplo, suponha que você queira buscar pela palavra “how” no testfile1.txt que contém as seguintes linhas:
Mas o requisito é que o grep pare de buscar após 3 linhas contendo o padrão buscado terem sido encontradas. Então, para fazer isso, você pode executar o seguinte comando:
grep "how" -m3 testfile1.txtAqui está o comando em ação:
Seguindo em frente, aqui está o que a página de manual do comando diz:
Se a entrada for a entrada padrão de um arquivo regular e NUM linhas correspondentes forem produzidas, o grep garante que a entrada padrão esteja posicionada logo após a última linha correspondente antes de sair, independentemente da presença de linhas de contexto finais. Isso permite que um processo chamador retome uma busca.Então, por exemplo, se você tiver um script bash que tenha um loop e você quiser buscar uma correspondência por iteração do loop, então usar ‘grep -m1’ fará o necessário.
Como fazer o grep obter padrões de um arquivo
Se você quiser, também pode fazer com que o comando grep obtenha padrões de um arquivo. A opção de linha de comando -f do ferramenta permite que você faça isso.
Por exemplo, suponha que você queira buscar todos os arquivos .txt no diretório atual por palavras “how” e “to”, mas queira fornecer essas strings de entrada através de um arquivo chamado, digamos, “input”, então aqui está como você pode fazer isso:
grep -f input *.txtAqui está o comando em ação:
Como fazer o grep exibir apenas aquelas linhas que correspondem completamente ao padrão de busca
Até agora, vimos que por padrão o grep corresponde e exibe linhas completas que contêm padrões de busca. Mas se o requisito é fazer com que o grep exiba apenas aquelas linhas que correspondem completamente ao padrão buscado, então isso pode ser feito usando a opção de linha de comando ‘-x’.
Por exemplo, suponha que o arquivo testfile1.txt contenha as seguintes linhas:
E o padrão que você deseja buscar é “how are you?”. Então, para garantir que o grep exiba apenas linhas que correspondem completamente a esse padrão, use-o da seguinte maneira:
grep -x "how are you?" *.txtAqui está o comando em ação:
Como forçar o grep a não exibir nada na saída
Pode haver situações em que você não precisa que o comando grep produza nada na saída. Em vez disso, você apenas quer saber se uma correspondência foi encontrada com base no status de saída do comando. Isso pode ser alcançado usando a opção de linha de comando -q.
Enquanto a opção -q silencia a saída, o status de saída da ferramenta pode ser confirmado pelo comando ‘echo $?’. No caso do grep, o comando sai com status ‘0’ quando é bem-sucedido (ou seja, uma correspondência foi encontrada), enquanto sai com status ‘1’ quando nenhuma correspondência foi encontrada.
A captura de tela a seguir mostra tanto os cenários bem-sucedidos quanto os malsucedidos:

Como fazer o grep exibir nomes de arquivos que não contêm o padrão de busca
Por padrão, o comando grep exibe o nome dos arquivos que contêm o padrão de busca (bem como as linhas correspondentes). Isso é bastante lógico, pois é o que se espera dessa ferramenta. No entanto, pode haver casos em que o requisito poderia ser obter os nomes daqueles arquivos que não contêm o padrão buscado.
Isso também é possível com o grep - a opção -L permite que você faça isso. Então, por exemplo, para encontrar todos os arquivos de texto no diretório atual que não contêm a palavra “how”, você pode executar o seguinte comando:
grep -L "how" *.txtAqui está o comando em ação:
Como suprimir mensagens de erro produzidas pelo grep
Você pode forçar o grep a silenciar quaisquer mensagens de erro que ele exiba na saída, se desejar. Isso pode ser feito usando a opção de linha de comando -s. Por exemplo, considere o seguinte cenário em que o grep produz erro/aviso relacionado ao diretório que encontra:
Então, nesse tipo de cenário, a opção de linha de comando -s ajuda. Veja abaixo.
Assim, você pode ver que o erro/aviso foi silenciado.
Como fazer o grep buscar diretórios recursivamente
Como está claro pelo exemplo usado no ponto anterior, o comando grep não faz uma busca recursiva por padrão. Para garantir que sua busca com grep seja recursiva, use a opção de linha de comando -d e passe o valor ‘recurse’ para ela.
grep -d recurse "how" *Nota 1 : A mensagem de erro/aviso relacionada ao diretório que discutimos no ponto anterior também pode ser silenciada usando a opção -d - tudo o que você precisa fazer é passar o valor ‘skip’ para ela.
Nota 2 : Use a opção ‘–exclude-dir=[DIR]’ para excluir diretórios que correspondem ao padrão DIR de buscas recursivas.
Como fazer o grep terminar nomes de arquivos com o caractere NULL
Como já discutimos, a opção de linha de comando -l do grep é usada quando você deseja que a ferramenta exiba apenas os nomes dos arquivos na saída. Por exemplo:
Agora, você deve saber que cada nome na saída acima é separado/terminado por um caractere de nova linha. Aqui está como você pode verificar isso:
Redirecione a saída para um arquivo e, em seguida, imprima o conteúdo do arquivo:
Assim, a saída do comando cat confirma a presença de um caractere de nova linha entre os nomes dos arquivos.
Mas como você pode já saber, o caractere de nova linha também pode ser parte de um nome de arquivo. Portanto, ao lidar com casos em que os nomes dos arquivos contêm uma nova linha e são separados/terminados por nova linha, torna-se difícil trabalhar na saída do grep (especialmente ao acessar a saída através de um script).
Seria bom se o caractere separador/terminador não fosse uma nova linha. Bem, você ficará feliz em saber que o grep fornece uma opção de linha de comando -Z que garante que os nomes dos arquivos sejam seguidos por um caractere NULL e não por uma nova linha.
Assim, no nosso caso, o comando se torna:
grep -lZ "how" *.txtAqui está como confirmamos a presença do caractere NULL:
A seguir está uma opção de linha de comando relacionada que você deve conhecer:
-z, --null-data
Trate a entrada como um conjunto de linhas, cada uma terminada por um byte zero (o caractere ASCII NUL) em vez de uma nova linha. Assim como a opção -Z ou --null, esta opção pode ser usada com comandos como sort -z para processar nomes de arquivos arbitrários.Como usar GREP para encontrar erros em arquivos de log
O grep é o canivete suíço do administrador Linux quando se trata de depurar erros em serviços. A maioria dos serviços Linux possui arquivos de log onde relatam erros. Esses arquivos de log podem ser enormes, e o grep é um comando versátil e rápido para buscar, por exemplo, o endereço IP de um sistema conectado, uma string de erro ou o endereço de e-mail de um usuário de e-mail afetado no mail.log.
Exemplos:
Busque por conexões relacionadas a um endereço de e-mail específico. Aqui, ‘[email protected]’ está no arquivo de log do servidor mail.log.
grep [email protected] /var/log/mail.logResultado:
Aug 22 09:45:10 mail dovecot: pop3-login: Login: user=<[email protected]>, method=PLAIN, rip=192.168.0.112, lip=78.46.229.46, mpid=17596, TLS, session=<3uoa5ffQovld3Uep>
Aug 22 09:45:10 mail dovecot: pop3([email protected])<17596><3uoa5ffQovld3Uep>: Disconnected: Logged out top=0/0, retr=1/6647, del=1/1, size=6630
Aug 22 09:45:10 mail dovecot: pop3-login: Login: user=<[email protected]>, method=PLAIN, rip=192.168.0.112, lip=78.46.229.46, mpid=17673, TLS, session=
Aug 22 09:45:10 mail dovecot: pop3([email protected])<17673>: Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0
Aug 22 09:45:10 mail dovecot: pop3-login: Login: user=<[email protected]>, method=PLAIN, rip=192.168.0.112, lip=78.46.229.46, mpid=17868, TLS, session=
Aug 22 09:45:10 mail dovecot: pop3([email protected])<17868>: Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0
Aug 22 09:45:10 mail dovecot: pop3-login: Login: user=<[email protected]>, method=PLAIN, rip=192.168.0.112, lip=78.46.229.46, mpid=17964, TLS, session=
Aug 22 09:45:10 mail dovecot: pop3([email protected])<17964>: Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0
Aug 22 09:45:10 mail postfix/smtpd[6932]: NOQUEUE: reject: RCPT from unknown[1.2.3.4]: 504 5.5.2 <1.2.3.4>: Helo command rejected: need fully-qualified hostname; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<1.2.3.4> Para monitorar continuamente um arquivo de log em busca de conexões para este endereço de e-mail, combine os comandos tail e grep assim:
tail -f /var/log/mail.log | grep [email protected]Para sair da função de monitoramento, pressione as teclas [strg] + c.
Mais exemplos do comando GREP
Você pode encontrar ainda mais exemplos de uso deste comando Linux em nosso segundo tutorial sobre o comando GREP.
- Como realizar busca de padrões em arquivos usando Grep
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.