Desbloqueie o Poder desses Equivalentes de grep no Windows

Cansado de usar as mesmas ferramentas de busca em seu computador, como o grep? Por que se contentar? Muitos equivalentes ao grep no Windows podem ajudar a buscar exatamente o que você procura.

Neste tutorial, você aprenderá como esses equivalentes ao grep tornam possível buscar arquivos mais rapidamente e encontrar as informações que você precisa num piscar de olhos.

Fique ligado e faça amizade com ferramentas de busca poderosas!

Pré-requisitos

Este tutorial inclui demonstrações práticas. Para acompanhar, certifique-se de ter o seguinte em mãos:

  • A Window machine – This tutorial uses Windows 10 PC, but any version of Windows will suffice.
  • PowerShell – Este tutorial utiliza o PowerShell 7.2.8.
  • scoop – Este tutorial utiliza o scoop v0.3.1.

Localizando Sequências Específicas de Texto (findstr) em Arquivos

Ser capaz de identificar instantaneamente sequências específicas de texto (com padrões particulares) em um arquivo ajuda bastante no seu fluxo de trabalho. Mas como fazer isso? Recorra ao utilitário de linha de comando findstr no Windows, que permite buscar sequências específicas de texto em arquivos.

findstr é frequentemente utilizado como equivalente ao grep no Windows, pois possui funcionalidades semelhantes ao comando Unix grep. Quais são os benefícios de usar findstr? Um exemplo é que ele está incorporado a qualquer sistema operacional (SO) Windows – nenhum software adicional é necessário.

Para encontrar cadeias de caracteres específicas em um arquivo, siga estas etapas:

Crie um arquivo de texto com seu editor de texto preferido, nomeie-o notes.txt e insira o conteúdo abaixo no arquivo.

Hello, world. This is an example of a text file.
I am writing some notes in this file.
Here are some keywords to search for: apple banana cherry.

Agora, abra o PowerShell como administrador e execute o comando abaixo para procurar cadeias de caracteres (findstr) no padrão de pesquisa (”apple") no arquivo notes.txt.

? O findstr possui muitos parâmetros que podem ser usados para personalizar a pesquisa. Neste tutorial, você explorará alguns dos parâmetros mais valiosos ao procurar cadeias de caracteres em arquivos.

findstr "apple" "C:\\myfiles\\notes.txt
Searching text strings with the word apple in it

? Talvez você esteja procurando cadeias de caracteres em vários arquivos. Se for o caso, especifique os caminhos dos arquivos separados por espaços, como o exemplo abaixo: findstr parâmetros "padrão" "C:\\caminho\\para\\arquivo1.txt" "C:\\caminho\\para\\arquivo2.txt"

Encontrar Cadeias de Caracteres que Correspondam a um Padrão Específico ou Literal

Quando se trabalha com arquivos de configuração, encontrar strings em um padrão específico ou literal é crucial, especialmente durante a depuração. Felizmente, o parâmetro /c indica ao comando findstr para buscar strings literais que correspondam a um padrão especificado, incluindo espaços ou caracteres especiais.

Acrescentar o parâmetro /c ao comando findstr é útil em situações como:

  • Pesquisar por uma frase específica ou conjunto de palavras que aparecem em uma ordem particular.
  • Procurar por uma string que contenha espaços ou caracteres especiais.

Para ver como o parâmetro /c funciona na prática, siga estes passos:

1. Execute o comando findstr abaixo para buscar a string literal (/c) banana cherry no arquivo *notes.txt*.

findstr /c:"banana cherry" "C:\myfiles\notes.txt"

No resultado abaixo, o comando findstr retorna apenas as linhas que contêm a string exata banana cherry com um espaço entre as duas palavras.

Lembre-se de que o parâmetro /c diferencia maiúsculas de minúsculas, então o comando findstr retorna apenas a string com a mesma caixa de letras que você especificou. Se alguma das strings no arquivo notes.txt não coincidir com o padrão especificado, o comando findstr retorna uma saída em branco.

Searching for a literal string

2. Em seguida, adicione a seguinte linha ao arquivo notes.txt e salve as alterações.

Neste ponto, deverá haver duas linhas no seu arquivo notes.txt com a cadeia “hello”. Uma toda em minúsculas (hello, world.), e outra com a letra ‘H’ em maiúscula (Hello, world.).

hello, world.

3. Agora, execute cada comando abaixo para buscar pela cadeia literal hello, world ou Hello, world no arquivo notes.txt.

# Padrão todo em minúsculas
findstr /c:"hello, world" "C:\myfiles\notes.txt"
# Com a letra 'H' em maiúscula
findstr /c:"Hello, world" "C:\myfiles\notes.txt"

Observe abaixo que, independentemente de ter duas linhas no arquivo notes.txt que contêm a cadeia ‘hello, world’, você obterá apenas uma linha de string.

O parâmetro /c indica ao comando findstr para imprimir as linhas que contêm a cadeia ‘hello, world’ com letras minúsculas ou maiúsculas.

Searching for the ‘hello, world’ literal string with the lowercase ‘h’

4. Por fim, execute o comando findstr abaixo para buscar por strings que contenham o padrão hello no arquivo notes.txt, ignorando (/i) a diferenciação de maiúsculas.

Buscas sensíveis a maiúsculas e minúsculas funcionam bem se você já souber a caixa de letras real da string que está procurando. Mas se desejar ver todas as linhas de strings que correspondem a um padrão, independentemente da caixa de letras, o parâmetro /i resolverá.

findstr /i "hello" "C:\myfiles\notes.txt"
Searching strings while Ignoring the letter case

Localizando Strings Específicas em Arquivos e Diretórios

Além de procurar por strings específicas em arquivos, o comando findstr permite procurar por strings correspondentes dentro de arquivos, diretórios e subdiretórios.

Suponha que você deseje encontrar todos os arquivos em um diretório que tenham uma palavra específica em seu conteúdo. Se assim for, deixe o parâmetro /s fazer o trabalho sujo.

Execute o comando abaixo para pesquisar (/s) no diretório atual e em seus subdiretórios (/s) por todos os arquivos (*.*) que contenham a palavra sistema, ignorando o caso das letras (-i).

Tenha em mente que este comando apenas procura por arquivos que contenham a palavra sistema como uma palavra inteira e não aqueles que são parte de palavras maiores, como sistemático ou sistematizar.

findstr /s /i system *.*

A saída abaixo mostra uma lista de nomes de arquivos, um por linha, com o nome de cada arquivo que contém a palavra ‘sistema’.

Finding specified strings within files, directories, and subdirectories

Pesquisando Strings Usando o cmdlet Select-String

Até agora, você viu que o comando findstr funciona excelente na busca de strings, mas o cmdlet Select-String não deve ser deixado de lado. Este cmdlet é equivalente ao grep no Windows, permitindo que você pesquise por padrões de texto específicos em arquivos e strings.

O cmdlet Select-String foi projetado para eficiência, permitindo que você pesquise rapidamente grandes quantidades de texto e suporta expressões regulares (regexes). Por sua vez, este cmdlet permite que você pesquise por padrões ainda mais complexos do que o findstr.

Para ver como funciona o cmdlet Select-String, siga estes passos:

1. Abra primeiro o arquivo notes.txt, adicione as seguintes linhas e salve as alterações.

A adição dessas linhas é uma preparação para demonstrar como o cmdlet Select-String lida com maiúsculas e minúsculas nos próximos passos.

Apple
APPLE
ApplE

2. Em seguida, execute o seguinte comando para buscar a string apple no arquivo notes.txt.

Select-String -Pattern "apple" -Path "C:\myfiles\notes.txt"

Abaixo, várias linhas contêm a string ‘apple’ mas em diferentes casos de letras, uma vez que o cmdlet Select-String é insensível a maiúsculas e minúsculas. Mas a vantagem é que você pode facilmente identificar e verificar as strings correspondentes, pois elas estão destacadas.

Searching for a string in a text file

? Talvez você queira usar correspondência simples de strings em vez de correspondência de regex. Se sim, adicione o parâmetro -SimpleMatch, conforme mostrado abaixo, e nunca se preocupe com a sintaxe de regex e caracteres especiais. Select-String 'APPLE' "C:\\myfiles\\notes.txt" -SimpleMatch

3. Agora, execute o comando abaixo para buscar APPLE no arquivo notes.txt com a sensibilidade a maiúsculas e minúsculas ativada (-CaseSensitive). O parâmetro -CaseSensitive é útil para precisão na busca.

Select-String -Pattern 'APPLE' -Path "C:\myfiles\notes.txt" -CaseSensitive

Como você pode ver abaixo, a única correspondência encontrada tem exatamente o caso de letra que você especificou (APPLE).

Searching for a string with case sensitivity enabled

4. Por último, execute o comando abaixo usando regex para buscar o padrão '\?' (um ponto de interrogação) em todos os arquivos de texto (*.txt) no diretório $PSHOME\en-US. Um regex permite buscar por padrões mais complexos.

Select-String -Path "$PSHOME\en-US\*.txt" -Pattern '\?’

Se o conteúdo de um arquivo tiver um ponto de interrogação, o comando retorna o caminho completo do arquivo para o console, como mostrado abaixo.

Searching for a string (a question mark) in files using regex

Usando o ripgrep (rg) como equivalente ao grep no Windows

O rg é uma utilidade de linha de comando de código aberto projetada para pesquisar rapidamente através de arquivos usando padrões regex. Como outras utilidades de linha de comando, o rg possui muitas opções e recursos para personalizar suas pesquisas.

Mas ao contrário do findstr e do cmdlet Select-String, o rg não está instalado por padrão no seu sistema operacional Windows.

Para usar o rg como seu equivalente ao grep no Windows:

1. Execute o comando scoop abaixo para instalar o ripgrep no seu sistema. scoop install ripgrep

scoop install ripgrep
Installing ripgrep on your system

2. Em seguida, execute o seguinte comando rg para verificar a versão instalada do rg.

rg --version

Como mostrado abaixo, você verá o número da versão do rg instalado. Neste ponto, você já pode executar comandos rg para procurar por strings.

Verifying rg is installed

3. Execute o comando rg abaixo para procurar a string apple no arquivo notes.txt.

rg apple C:\myfiles\notes.txt

A saída exibe qualquer linha no arquivo notes.txt que contenha a string apple, como mostrado abaixo.

Observe que a saída é semelhante à saída do cmdlet Select-String. Mas, em vez de destacar, o rg altera a cor da string correspondente e do número da linha para rápida distinção.

Searching for the string ‘apple’ in a text file

4. Agora, execute o seguinte comando usando regex para procurar por strings no arquivo notes.txt.

O regex abaixo utiliza limites de palavra (\b) e indica ao rg para procurar linhas de strings que contenham uma palavra que começa com ‘s’ e termina com ‘e’ (s\w+e).

rg "\bs\w+e\b" "C:\myfiles\notes.txt"
Search for strings using regex

Filtrar Pesquisas por Tipo de Arquivo Específico

Talvez você tenha preferência por qual diretório o arquivo que está procurando está, mas não pelo nome do arquivo. Em tais casos, buscar pelo conteúdo do arquivo enquanto filtra a pesquisa pelo tipo de arquivo pode ser a melhor opção.

Filtrar a pesquisa para tipos de arquivo específicos pode ser útil quando você está interessado apenas em procurar por tipos específicos de arquivos. Ou quando deseja excluir certos tipos de arquivos da pesquisa.

Para filtrar a pesquisa para tipos de arquivo específicos, a opção --type resolverá, conforme abaixo:

1. Execute o seguinte comando rg para procurar a string apple em todos os arquivos de texto (--type txt) no diretório C:\\myfiles.

A opção --type recebe um tipo de arquivo como argumento, indicando ao comando rg para buscar apenas arquivos que correspondam ao tipo de arquivo especificado.

rg "apple" "C:\myfiles" --type txt

O resultado abaixo mostra a linha contendo a string ‘apple‘ e o nome do arquivo associado (notes.txt).

Filtering the search to specific file types

2. Em seguida, crie um arquivo XML chamado notes.xml e preencha com o código abaixo. Este arquivo XML é apenas uma preparação para demonstrar como as pesquisas com caracteres coringa funcionam.

<?xml version="1.0" encoding="UTF-8"?>
<fruitBasket>
  <fruit id="1">
    <fruitName>Apple</fruitName>
  </fruit>     
</fruitBasket>

3. Agora, execute o comando abaixo para procurar a string apple em todos os (*.). Este comando busca apenas por arquivos txt e xml conforme especificado (-g).

rg "apple" "C:\myfiles" -g '*.{txt,xml}

Por padrão, o rg diferencia maiúsculas de minúsculas. Como resultado, a saída mostra apenas a linha que contém exatamente a string ‘apple’ e o arquivo associado.

Filtering searches by a broader range of file types

4. Por fim, execute o seguinte comando, como fez no passo três, para buscar a string apple em todos os arquivos (*.) que têm a extensão txt ou xml. Mas desta vez, adicione a opção -i, que instrui o rg a ignorar maiúsculas e minúsculas.

rg "apple" "C:\myfiles" -g '*.{txt,xml}-i
Filtering searches by a broader range of file types ignoring letter cases

Conclusão

Ao longo deste tutorial, você aprendeu muitos equivalentes ao comando grep no Windows para buscar strings de forma literal e usando expressões regulares. Você desbloqueou o poder desses equivalentes ao grep com uma variedade de opções e parâmetros para personalizar a busca e filtrar por tipos de arquivo específicos.

Neste ponto, você deveria se sentir confiante em depurar problemas, identificar questões e pesquisar em conjuntos grandes de arquivos de texto.

Agora, por que não colocar suas novas habilidades à prova praticando com expressões regulares e personalizando suas buscas?

Source:
https://adamtheautomator.com/grep-equivalents-in-windows/