Para trabalhar com distribuições Linux, você principalmente utiliza o terminal ou console, que exigem conhecimento de comandos básicos para trabalhar plenamente com o ambiente. Para quase toda tarefa existe uma utilidade que executa funções predefinidas. A busca por arquivos e padrões de texto neles não é exceção. As duas principais utilidades que ganharam popularidade e ainda são usadas hoje em dia são find e grep. Se o find é usado apenas para encontrar o caminho de arquivos pelas suas propriedades, então o grep realiza, além disso, uma busca pelo conteúdo dos arquivos. Neste artigo, vamos examinar sua sintaxe, principais opções e exemplos de uso!
O que é o GREP e como posso encontrá-lo?
Como mencionado acima, o GREP é uma utilidade multifuncional do Linux para busca de arquivos e textos usando padrões, expressões regulares.
Em geral, muitas distribuições já possuem esse pacote pré-instalado. Para verificar se ele está disponível na sua máquina, insira o comando:
grep
Se a saída se parecer com esta, então o pacote já está instalado; caso contrário, instale-o por meio do seu gerenciador de pacotes. Para Ubuntu, Debian e sistemas apt-like:
apt update && apt upgrade && apt install grep
Para sistemas RPM-like, o comando para instalar um pacote com suas dependências pode ser assim:
dnf update && dnf upgrade && dnf install grep
Depois de garantir que o pacote foi instalado, vamos analisar a sintaxe da utilidade e suas opções!
Sintaxe e opções
O comando grep é utilizado para buscas, assim como as opções básicas que formam a sintaxe do comando:
grep [options] [pattern] [path to file]
Para uma busca simples de um padrão em um arquivo, usamos o comando:
grep 'named Alex' /home/kk.txt
No arquivo dado, o padrão solicitado foi encontrado e destacado, neste caso utilizando apenas os dois blocos de sintaxe básicos [pattern] e [path to file] sem [options]. Mas e se precisarmos realizar uma busca mais complexa com várias condições? Existe uma lista completa de opções [options] para isso, vamos analisar as principais e dar exemplos de uso:
Configuração de mapeamento de padrões:
- E, --extended-regexp: Expressões regulares estendidas para padrões;
- G, --basic-regexp: Expressões regulares básicas para padrões;
- P, --perl-regexp: Uso de expressões regulares Perl.
Fontes de padrões:
- e, --regexp=[pattern]: Permite especificar um padrão diretamente;
- f, --file=[file]: Permite especificar o padrão diretamente.
Controle de maiúsculas e minúsculas:
- i, --ignore-case: Busca ignorando a diferenciação entre maiúsculas e minúsculas;
--no-ignore-case: Busca sensível a maiúsculas e minúsculas, comportamento padrão.
Modos especiais de correspondência:
- w, --word-regexp: Considera apenas palavras inteiras ao buscar;
- x, --line-regexp: Apenas corresponde a linhas inteiras.
Terminação alternativa de strings:
- z, --null-data: Trata o fim de uma linha como um byte nulo em vez de um caractere de nova linha.
Todos esses grupos de opções se referem à configuração da maneira como o padrão é mapeado em um conjunto de dados. Para uma busca um pouco mais complexa do que no primeiro exemplo, usaremos expressões regulares comuns. As outras opções não serão necessárias agora. Vamos especificar o mesmo padrão:
grep -e 'named Alex' /home/kk.txt
Existem duas ocorrências de Alex e Alex's parents no texto. A essência do funcionamento das expressões regulares é que elas dividem os dados em caracteres e procuram padrões. Portanto, ao buscar com grep -e 'nome Alex' /home/kk.txt, haverá duas correspondências: Alex e Alex's parents. Como encontrar uma palavra ou string específica para que outros valores não sejam capturados? Para isso, usamos a opção -w, que permite dividir frases por palavras, não por caracteres:
grep -w -e 'Alex' /home/kk.txt
Como você pode ver no exemplo, a palavra Alex's não foi destacada, pois a divisão foi feita palavra por palavra.
Busca recursiva com grep
Mas e se houver mais de um arquivo e você precisar verificar vários arquivos no mesmo diretório? Para isso, o grep possui a opção -r, que permite definir uma pasta para buscar em seu conteúdo. Vamos implementar a consulta de nosso nome de usuário nos logs:
grep -r "ghn" /var/log
Todos os passos no tutorial podem ser realizados em servidores na nuvem poderosos. A Serverspace fornece servidores VPS isolados para uso comum e virtualizado.
Levará algum tempo para implantar a capacidade do servidor. Após isso, você pode se conectar de qualquer maneira conveniente!
Filtrando a saída de comandos
Muito frequentemente, no Linux, a saída dos comandos no terminal é grande ou contém muitas informações desnecessárias. Para isso, usamos pipe ou redirecionamos para a utilidade grep. Parece assim, suponhamos que precisemos verificar se o pacote NetworkManager para gerenciamento de redes está instalado:
dnf list || grep "NetworkManager"
Se você estiver usando o gerenciador apt, substitua dnf no comando:
apt list || grep "NetworkManager"
Trabalhar com distribuições Linux requer habilidades no terminal e conhecimento de comandos básicos. As utilidades find e grep ocupam um lugar importante no arsenal de ferramentas, proporcionando uma busca eficiente por arquivos e seus conteúdos.