Utilizar PowerShell cmdlets para aprender o básico: como recuperar texto de ficheiros de texto e como encontrar texto em ficheiros de texto.
Uma das tarefas mais prevalentes que um profissional de TI deve fazer é criar, ler ou alterar ficheiros de texto de alguma forma. Os ficheiros de texto são representados em milhares de formatos diferentes, desde simples ficheiros TXT a XML, passando por vários formatos proprietários. Uma vez que os ficheiros de texto podem ser estruturados de forma tão variada, os fornecedores adoptaram o ficheiro de texto simples como meio de definir scripts, armazenar valores de configuração e consultas SQL e muito mais. A única diferença estrutural num ficheiro TXT e num ficheiro SQL, por exemplo, é apenas a extensão do ficheiro. O conteúdo é apenas texto estruturado de uma forma diferente e pré-definida.
PowerShell tem muitas formas diferentes de gerir todos estes tipos de ficheiro de texto, mas neste artigo vamos manter a abordagem mais genérica: Vamos concentrar-nos na leitura e na não-estruturação do texto. Isto significa que não há ficheiros XML, não há ficheiros de consulta SQL, nem sequer os próprios scripts PowerShell. Vamos concentrar-nos em dois tópicos:
- Como recuperar texto de ficheiros de texto.
- Como encontrar texto em ficheiros de texto.
Como recuperar texto de ficheiros de texto
Uma das tarefas mais fáceis é recuperar todo o texto de um ficheiro de texto existente. Para a maioria dos ficheiros de texto, um scripter PowerShell pode utilizar a Get-Content cmdlet. O Get-Content cmdlet é um PowerShell cmdlet muito popular que recuperará todo o texto de um ficheiro de texto especificado pelo parâmetro Path.
No mais simples, é possível passar o parâmetro Path com o caminho do ficheiro para um ficheiro de texto como argumento para o Get-Content cmdlet. Digamos que tenho um ficheiro chamado MyText.txt. Neste ficheiro de texto tenho as três linhas mostradas abaixo e gostaria de obter o conteúdo do MyText.txt com um script PowerShell.
Para isso, posso usar Get-Content com o parâmetro Path.
Verá que o resultado foi todo o conteúdo de MyText.txt. Mas e se apenas quisesse ver um determinado número de linha? Por defeito, Get-Content lê cada linha de um ficheiro de texto e cria um array como saída com cada linha do texto como um elemento desse array. Isto significa que posso facilmente escolher diferentes elementos dessa matriz, especificando o número de índice da matriz. Neste exemplo, o número de índice do array é igual ao número de linha do ficheiro de texto.
No exemplo acima, estou a mostrar que o resultado de Get-Content é um tipo de System.Array e que ao utilizar números de índice entre parênteses posso escolher quais as linhas que quero que saiam para a minha consola. Uma coisa a notar é que se não estiver familiarizado com os arrays e o seu esquema de numeração, o primeiro elemento de um array começa com um zero. É por isso que posso utilizar o número um para escolher a segunda linha e o número dois para escolher a terceira linha. Isto é importante para lembrar.
Como encontrar texto em ficheiros de texto
Após ser capaz de descobrir como encontrar todo o texto em ficheiros de texto ou certos números de linha, outra tarefa popular é encontrar texto específico dentro dos próprios ficheiros. Existem algumas formas diferentes de o fazer, mas a mais fácil é utilizar a cmdlet Where-Object. A cmdlet Where-Object é uma popular cmdlet que lhe permite “filtrar” várias informações da saída de outros cmdlet; neste exemplo, está a filtrar informações da cmdlet Get-Content.
Usando o nosso ficheiro de texto anterior como exemplo, digamos que quero ver se esse ficheiro de texto contém as palavras “ficheiro de texto” juntas nele. Para tal, utilizarei Where-Object.
Ao utilizar Where-Object, tenho de utilizar a variável $_. Esta é uma variável especial em PowerShell conhecida como a variável pipeline. Neste exemplo, representa cada linha do ficheiro de texto, uma vez que vem de Get-Content. Estou então a utilizar o operador semelhante e a utilizar wildcards para ver se a string “ficheiro de texto” existe em qualquer uma das linhas do ficheiro de texto. Parece que encontrou duas linhas que correspondem à string.
Se quiser saber mais sobre como encontrar texto em ficheiros de texto, sugiro que procure nos operadores de comparação do PowerShell. Usando o operador de comparação, por exemplo, usa regex, que é muito mais poderoso do que o operador semelhante e permite encontrar praticamente qualquer padrão que se possa pensar num ficheiro de texto.