Comando #Windows equivalente ao grep (#Unix). (#Cmd #PowerShell #linux #findstr #dev #grep)

Comando #Windows equivalente ao grep (#Unix). (#Cmd #PowerShell #linux #findstr #dev #grep)

Overview

Continuando nosso mergulho no universo dos comandos do Windows que espelham a funcionalidade do grep do Unix, este post oferece um guia prático para extrair informações valiosas de streams de texto, desta vez focando no comando netstat. Entre o prompt de comando e o PowerShell, exploraremos diversos filtros para isolar informações específicas, tornando simples até as buscas mais complexas. Ideal para quem busca eficiência e precisão no dia a dia da administração de sistemas.

Seguindo a mesma temática do último post, mostro aqui os comandos Windows que são equivalentes ao grep do Unix. O grep é muito utilizado para processar streams de texto e extrair informações dele. Aqui mostro um comando para o prompt (cmd) e outro para o Powershell.

Para os exemplos deste post, vou extrair informações do resultado do comando netstat.

O comando será: netstat -na

Que exibe:

  • Endereços e portas com formato numérico. (-n)
  • Todas as conexões e portas abertas. (-a)

Prompt (cmd) e Powershell

– Filtrar o resultado por linhas que contenham a porta 5000:

netstat -na | findstr 5000

– Filtrar o resultado por linhas que mostrem o estado “ESTABLISHED

netstat -na | findstr ESTABLISHED

– Filtrando o resultado por linhas que contenham o texto “tcp”, fazendo uma busca case insensitive

netstat -na | findstr -i tcp

– Filtrando o resultado, buscando por linhas que mostrem uma conexão TCP, onde o IP começa com 192, termina com 193 e está com estado TIME_WAIT. Esta busca é bem complexa, então vou utilizar regex:

netstat -na | findstr /i "TCP.*192\..*\..*\.193.*TIME_WAIT"

O expressão regular utilizada é meio estranha e não está muito dentro do padrão. O findstr não é totalmente aderente ao regex mais padronizado que conhecemos.

Algumas dicas para utiliza-lo:

  • . (ponto): Wildcard. Representa qualquer caractere
  • * (asterisco): Repetição. Zero ou mais ocorrências do caractere anterior.
  • ^: Inicio da linha
  • $: Final da linha
  • [bacon]: qualquer letra que esteja nesta sequencia
  • [^bacon]: qualquer letra que não esteja nesta sequencia
  • [a-x] qualquer letra no range entre a e x.
  • \x: caractere com escape. representa (literalmente) x.
  • \<ba: inicio da palavra
  • con\>: final da palavra

PowerShell

O comando para realizar esta operação no Powershell é o Select-String e funciona da mesma forma que o findstr.

– Filtrar o resultado por linhas que contenham a porta 5000:

netstat -na | Select-string 5000

– Filtrar o resultado por linhas que mostrem o estado “ESTABLISHED

netstat -na | Select-String ESTABLISHED

– Filtrando o resultado por linhas que contenham o texto “tcp”, fazendo uma busca case insensitive

netstat -na | Select-String tcp

– Filtrando o resultado, buscando por linhas que mostrem uma conexão TCP, onde o IP começa com 192, termina com 193 e está com estado TIME_WAIT. Esta busca é bem complexa, então vou utilizar regex:

netstat -na | Select-String "TCP.*192\..*\..*\.193.*TIME_WAIT"

Espero ter ajudado.