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.