Desbloqueie o Poder desses Equivalentes de grep no Windows

Cansado de usar as mesmas ferramentas de busca antigas em sua máquina, como o grep? Por que se contentar? Muitos equivalentes do grep no Windows podem ajudar a buscar precisamente o que você está procurando.

Neste tutorial, você aprenderá como esses equivalentes do grep tornam possível buscar através de arquivos mais rapidamente e encontrar a informação que você precisa num piscar de olhos.

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

Pré-requisitos

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

  • 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.

Encontrando Cadeias de Texto Específicas (findstr) Dentro de Arquivos

Ser capaz de identificar instantaneamente cadeias de texto específicas (com padrões particulares) que você está procurando em um arquivo ajuda muito em seu fluxo de trabalho. Mas como? Recorra à utilidade de linha de comando findstr no Windows, que permite buscar cadeias de texto específicas dentro de arquivos.

O findstr é frequentemente usado como um equivalente ao grep no Windows, pois tem funcionalidade semelhante ao comando Unix grep. Quais são os benefícios de usar o findstr? Um exemplo é que ele está integrado a qualquer sistema operacional (SO) Windows – nenhum software adicional é necessário.

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

Crie um arquivo de texto com seu editor de texto preferido, nomeie-o como notes.txt e preencha 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 encontrar cadeias (findstr) contra o padrão de pesquisa ("apple") no arquivo notes.txt.

? O findstr tem muitos parâmetros que podem ser usados para personalizar a pesquisa. Mas neste tutorial, você explorará alguns dos parâmetros mais valiosos ao pesquisar cadeias em arquivos.

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

? Talvez você esteja procurando por cadeias 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"

Encontrando Cadeias que Correspondam a um Padrão Específico ou Literal

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

Adicionar o parâmetro /c ao comando findstr é útil para, mas não se limitando a:

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

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

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

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

No resultado abaixo, o comando findstr retorna apenas linhas contendo a cadeia de caracteres exata banana cherry com um espaço entre as duas palavras.

Lembre-se de que o parâmetro /c é sensível a maiúsculas e minúsculas, então o comando findstr retorna apenas a cadeia de caracteres com o caso exato de letras que você especificou. Se alguma das cadeias de caracteres no arquivo notes.txt não corresponder ao 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, deve haver duas linhas no seu arquivo notes.txt com a string “hello”. Uma em minúsculas (hello, world.), e outra com um ‘H’ maiúsculo (Hello, world.).

hello, world.

3. Agora, execute cada comando abaixo para procurar a literal string hello, world ou Hello, world no arquivo notes.txt.

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

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

O parâmetro /c indica ao comando findstr que ele deve imprimir linhas que contenham a string ‘hello, world’ com letra minúscula ou maiúscula ‘H’.

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

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

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

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

Encontrando Strings Específicas Dentro de Arquivos e Diretórios

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

Suponha que deseje encontrar todos os arquivos em um diretório que contenham uma palavra específica em seu conteúdo. Se for o caso, 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 string system, ignorando a diferenciação de maiúsculas e minúsculas (-i)

Lembre-se de que este comando procura apenas por arquivos que contenham a string system como uma palavra completa e não aquelas que fazem 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 string ‘system’.

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 para encontrar strings, mas o cmdlet Select-String não deve ser ignorado. Este cmdlet é equivalente ao grep no Windows e permite que você pesquise padrões de texto específicos em arquivos e strings.

O cmdlet Select-String é projetado para eficiência, permitindo que você pesquise rapidamente grandes quantidades de texto e suporte a expressões regulares (regex). Por sua vez, este cmdlet permite que você pesquise 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 passos seguintes.

Apple
APPLE
ApplE

2. Em seguida, execute o seguinte comando para procurar 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 maiúsculas e minúsculas, já que o cmdlet Select-String não diferencia maiúsculas de minúsculas. Mas a boa notícia é que você pode identificar facilmente e verificar as strings correspondentes, já que elas estão destacadas.

Searching for a string in a text file

? Talvez você queira usar a correspondência de string simples em vez de correspondência de regex. Se for o caso, 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 procurar 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 pesquisa.

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

Como você pode ver abaixo, a única correspondência encontrada tem exatamente a mesma caixa de letras que você especificou (APPLE).

Searching for a string with case sensitivity enabled

4. Por fim, execute o comando abaixo usando regex para procurar o padrão '\?' (um ponto de interrogação) em todos os arquivos de texto (*.txt) no diretório $PSHOME\en-US. Um regex permite que você pesquise 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 um equivalente do grep no Windows

rg é um utilitário de linha de comando de código aberto projetado para pesquisar rapidamente arquivos usando padrões regex. Como outros utilitários de linha de comando, rg tem muitas opções e recursos para personalizar suas pesquisas.

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

Para usar o rg como seu equivalente do 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ê pode executar comandos rg para pesquisar por strings.

Verifying rg is installed

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

rg apple C:\myfiles\notes.txt

A saída exibe quaisquer linhas no arquivo notes.txt que contenham a string apple, como mostrado abaixo.

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

Searching for the string ‘apple’ in a text file

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

A regex abaixo usa limites de palavra (\b) e diz 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

Filtrando Pesquisas por Tipo de Arquivo Específico

Talvez você seja específico sobre em qual diretório o arquivo que está procurando está, mas não o nome do arquivo. Nesses casos, pesquisar pelo conteúdo do arquivo enquanto filtra a pesquisa por tipo de arquivo pode ser sua melhor opção.

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

Para filtrar a pesquisa para tipos de arquivo específicos, a opção –type fará o truque da seguinte forma:

1. Execute o seguinte comando rg para pesquisar 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, o que diz ao comando rg para pesquisar apenas arquivos que correspondam ao tipo de arquivo especificado.

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

A saída 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 XML chamado notes.xml e preencha o código abaixo. Este arquivo XML é apenas uma preparação para demonstrar como as pesquisas com caracteres curinga 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 apenas busca por arquivos txt e xml conforme especificado (-g).

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

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

Filtering searches by a broader range of file types

4. Finalmente, execute o seguinte comando, como fez no passo três, para procurar a string apple em todos os arquivos (*.) que têm a extensão txt ou xml. Mas desta vez, acrescente a opção -i, que instrui o rg a ignorar as 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 do grep no Windows para buscar strings de forma literal e usando regex. Você desbloqueou o poder desses equivalentes do grep com uma variedade de opções e parâmetros para personalizar a pesquisa e filtrar tipos específicos de arquivo.

Neste ponto, você deve 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 regexes e personalizando suas pesquisas?

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