PowerShell Grep
-
Cmdlet
Select-String
- Tarefa típica do Grep usando PowerShell
- Usando PowerShell Select-String para encontrar padrões

Onde você vai ao desenvolver código PowerShell sempre que precisa escanear conteúdo dentro de uma string ou de um arquivo de texto inteiro? Você está familiarizado com a popular utilidade grep se você usou muito o Linux. A utilidade grep permite que os usuários encontrem texto usando vários parâmetros; no entanto, não está disponível no Windows. Então, neste cenário, temos o cmdlet Select-String no PowerShell.
Cmdlet Select-String
Select-String verifica a correspondência inicial em cada linha por padrão e, em seguida, mostra o número da linha, o nome do arquivo e o texto pertencente à linha correspondente. O Select-String também pode funcionar com várias codificações de arquivos, por exemplo, texto Unicode, determinando o tipo de codificação usando a marca de ordem de bytes (BOM). O Select-String presumirá que é um arquivo UTF8 se a BOM estiver ausente.
Alguns usos do cmdlet Select-String
são explicados abaixo.
Tarefa típica do Grep usando PowerShell
Vamos começar com um exemplo. Vamos supor que temos uma string com nomes e endereços, e também, a string é não estruturada. Queremos extrair os nomes. Então, como vamos fazer isso será explicado abaixo.
||Sara Peiris|| 37, De silva road, Panadura
--||Tim Gangster||-- 345, Yolks street,KL
==|Suz Maker|== 44 Main, Cydney, CA
O texto acima é atribuído à variável users
. Então, com a tentativa será procurar um nome usando o parâmetro ‘Pattern’.
test | Select-String -Pattern 'Sara Peiris'
Saída:
Aqui, podemos entender que o método Select-String funcionou, mas não retornou o especificado, uma vez que passamos a string inteira. Portanto, vamos tentar passar linhas únicas dividindo usando o caractere de nova linha, uma vez que cada entrada específica é dada em uma única linha.
PS> test = test -split "`n"
PS> test | Select-String -Pattern 'Sara Peiris'
Saída:
Aqui podemos ver que retorna uma única linha. Em seguida, devemos procurar uma maneira de retornar várias linhas.
Usando PowerShell Select-String para encontrar padrões
Aqui, precisamos encontrar padrões comuns que sejam válidos para todas as linhas. Portanto, se pegarmos o exemplo anterior, você pode ver que todos os nomes estão rodeados por |
e os nomes são separados por um espaço. Portanto, agora, vamos tomar esse padrão usando a regex e enviá-lo com o parâmetro ‘Pattern’.
Select-String
usou a regex para recuperar cada linha; depois disso, eu terei que separar todos os nomes. Não preciso dos endereços para cada um neste momento. Usaremos o atributo Matches
de cada objeto correspondente retornado pelo Select-String para realizar isso.
PS> test | Select-String -Pattern '\|\w+ \w+\|' | foreach {$_.Matches}
Saída:
Agora você pode ver que o atributo Value tem os nomes que precisamos, mas eles ainda estão cercados pelo caractere |
. Isso porque a correspondência regex incluiu o caractere |
nos nomes.
Os caracteres pipe ainda devem ser incluídos no filtro, mas não queremos que eles sejam retornados como correspondências. Grupos regex são um método. O resultado que você gostaria de retornar está cercado por parênteses, que indicam grupos regex. Nessa situação, vou tentar novamente envolvendo a string regex que representa o primeiro e o último nome.
PS> test | Select-String -Pattern '\|(\w+ \w+)\|' | foreach {$_.Matches}
Saída:
O caractere |
é mostrado no valor, mas de qualquer forma podemos ver que o grupo se tornou {0,1}
, o que significa que o Select-String identificou o grupo.
Vou reinserir a referência no loop for
cada para ver esse grupo. Como cada atributo de grupo é um array, podemos nos referir ao primeiro membro colocando-o entre parênteses e, em seguida, usando a propriedade Value.
PS> test | Select-String -Pattern '\|(\w+ \w+)\|' | foreach {$_.Matches.Groups[1].Value}
Saída:
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.