Pesquisa de site

Como usar o comando Grep no Linux [12 exemplos úteis]


Você já se deparou com a tarefa de procurar uma sequência ou padrão específico em um arquivo, mas não tem ideia por onde começar a procurar? Pois bem, aqui está o comando grep para o resgate!

grep é um poderoso buscador de padrões de arquivos que vem equipado em todas as distribuições do Linux. Se por algum motivo ele não estiver instalado em seu sistema, você pode instalá-lo facilmente por meio de seu gerenciador de pacotes, conforme mostrado.

sudo apt install grep         [On Debian, Ubuntu and Mint]
sudo yum install grep         [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
sudo emerge -a sys-apps/grep  [On Gentoo Linux]
sudo apk add grep             [On Alpine Linux]
sudo pacman -S grep           [On Arch Linux]
sudo zypper install grep      [On OpenSUSE]    

Descobri que a maneira mais fácil de começar a usar o comando grep é mergulhar de cabeça e usar alguns exemplos do mundo real.

1. Pesquise e encontre arquivos no Linux

Digamos que você acabou de instalar uma nova cópia do novo Ubuntu em sua máquina e que vai experimentar os scripts Python.

Você está vasculhando a web em busca de tutoriais, mas vê que existem duas versões diferentes do Python em uso e não sabe qual versão do Python está instalada no Ubuntu pelo instalador, ou se instalou algum módulo.

Simplesmente execute o seguinte comando dpkg com grep conforme mostrado:

dpkg -l | grep -i python

Primeiro, executamos dpkg –l, que lista os pacotes *.deb instalados em seu sistema. Em segundo lugar, canalizamos essa saída para grep -i python, que simplesmente afirma “vá para grep, filtre e retorne tudo que contém ‘python’. ”

A opção -i existe para ignorar maiúsculas e minúsculas, já que grep diferencia maiúsculas de minúsculas. Usar a opção -i é um bom hábito, a menos, é claro, que você esteja tentando fazer uma pesquisa mais específica.

2. Pesquise e filtre arquivos no Linux

O grep também pode ser usado para pesquisar e filtrar arquivos individuais ou múltiplos arquivos. Vejamos este cenário:

Você está tendo problemas com seu servidor Web Apache e entrou em contato com um dos muitos fóruns incríveis na rede pedindo ajuda.

A alma gentil que responde a você pediu que você postasse o conteúdo do seu arquivo /etc/apache2/apache2.conf. Não seria mais fácil para você, para o cara que está te ajudando e para todos que estão lendo se você pudesse remover todas as linhas comentadas? Bem, você pode! Basta executar isto:

grep -v ^\# /etc/apache2/apache2.conf | grep .

A opção -v diz ao grep para inverter sua saída, o que significa que em vez de imprimir linhas correspondentes, faça o oposto e imprima todas as linhas que não correspondem à expressão, neste caso, as linhas comentadas #.

Observe que também usamos grep . no final para ocultar a saída de todas as linhas vazias. Desta forma, vemos apenas as definições de configuração em nosso terminal.

3. Encontre todos os arquivos .mp3 no Linux

O grep pode ser muito útil para filtrar do stdout. Por exemplo, digamos que você tenha uma pasta inteira cheia de arquivos de música em vários formatos diferentes.

Você deseja encontrar todos os arquivos *.mp3 do artista JayZ, mas não quer nenhuma das faixas remixadas. Usar um comando find com alguns canais grep resolverá o problema:

find . -name “*.mp3” | grep –i JayZ | grep –vi “remix”

Neste exemplo, estamos usando find para imprimir todos os arquivos com uma extensão *.mp3, canalizando-os para grep –i para filtrar e imprima todos os arquivos com o nome “JayZ ” e então outro canal para grep –vi que filtra e não imprime todos os nomes de arquivos com a string (em qualquer caso) “remixar ”.

4. Exiba o número de linhas antes ou depois da string de pesquisa

Outras opções são as opções -A e -B, que exibem a linha correspondente e um número de linhas que vêm antes ou depois da string de pesquisa.

Embora a página de manual forneça uma explicação mais detalhada, acho mais fácil lembrar as opções como -A=depois e -B=< forte>antes:

ifconfig | grep -A 4 inet
ifconfig | grep -B 2 UP

5. Imprime o número de linhas ao redor da correspondência

A opção -C do grep é semelhante, mas em vez de imprimir as linhas que vêm antes ou depois da string, ele imprime as linhas em qualquer direção:

ifconfig | grep -C 2 lo

 TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 15314  bytes 1593769 (1.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0

6. Conte o número de correspondências

Semelhante a canalizar uma string grep para contagem de palavras (comando wc), a opção integrada do grep pode fazer o mesmo para você:

ifconfig | grep -c inet6

7. Pesquise arquivos por determinada string no Linux

A opção –n para grep é muito útil ao depurar arquivos durante erros de compilação. Ele exibe o número da linha no arquivo da string de pesquisa fornecida:

grep -n "main" setup.py

8. Pesquise uma string recursivamente em todos os diretórios

Se você quiser procurar uma string no diretório atual junto com todos os subdiretórios, você pode especificar a opção –r para pesquisar recursivamente:

grep -r “function” *

9. Pesquise o padrão completo

Passar a opção -w para o grep procura todo o padrão que está na string. Por exemplo, usando:

ifconfig | grep -w "RUNNING"

Irá imprimir a linha que contém o padrão entre aspas. Por outro lado, se você tentar:

ifconfig | grep -w "RUN"

Nada será retornado porque não estamos procurando um padrão, mas uma palavra inteira.

10. Pesquise uma string em arquivos compactados

Merecem alguma menção os derivados do grep. O primeiro é o zgrep, que, semelhante ao zcat, é para uso em arquivos gzipados. Ele usa as mesmas opções do grep e é usado da mesma maneira:

zgrep -i error /var/log/syslog.2.gz

11. Combine expressões regulares em arquivos

O comando egrep é outro derivado que significa “Extended Global Regular Expression”. Ele reconhece metacaracteres de expressão adicionais, como at + ? | e ().

O comando egrep é muito útil para pesquisar arquivos de origem e outras partes de código, caso seja necessário. Ele pode ser invocado a partir do grep normal especificando a opção -E.

grep -E

12. Pesquise uma string de padrão fixo

O comando fgrep procura em um arquivo ou lista de arquivos uma sequência de padrão fixa. É o mesmo que grep -F. Uma maneira comum de usar o fgrep é passar um arquivo de padrões para ele:

fgrep –f file_full_of_patterns.txt file_to_search.txt

Este é apenas um ponto de partida com o grep, mas como você provavelmente pode ver, ele é inestimável para diversos propósitos. Além dos comandos simples de uma linha que implementamos, o grep pode ser usado para escrever cron jobs poderosos e shell scripts robustos, para um começar.

Seja criativo, experimente as opções na página de manual e crie expressões grep que atendam aos seus próprios propósitos!