Buscas de Substring no PowerShell: Guia Rápido

A common scenario in an admin’s world is to figure out a way to find a certain snippet of text inside a string; called the substring. PowerShell makes finding a substring extremely easy.

Relacionado: Aprenda o Formato de String e Expansão de Strings

Anunciando um treinamento AO VIVO gratuito – Iniciando sua Jornada com PowerShell – apresentado por Johan Arwidmark. Entenda como as habilidades em PowerShell podem melhorar sua carreira de TI, aprenda por onde começar com PowerShell, crie seus primeiros scripts e faça perguntas diretamente ao Johan em um ambiente de treinamento ao vivo.

PowerShell e Strings

No mundo do PowerShell, uma string consiste em um conjunto de caracteres envolvidos por aspas simples ou duplas. Strings como "foo" e 'bar' são extremamente comuns.

Relacionado: Voltando ao Básico: Strings em PowerShell

Vamos dizer que você definiu uma string em uma variável e só precisa encontrar uma parte dela? Por exemplo, digamos que você tenha uma string com um endereço como 1234 4th St. Você gostaria de extrair o número e sabe que os quatro primeiros caracteres sempre serão o número que você precisa. Neste caso, você pode usar o método substring() do PowerShell.

Usando o Método SubString do PowerShell

Para encontrar uma string dentro de outra string com o PowerShell, você pode usar o método Substring(). Este método é encontrado em todo objeto de string no PowerShell.

Por exemplo, talvez você tenha uma string como O rápido raposo marrom pulou sobre a cerca. Você gostaria de encontrar os primeiros cinco caracteres. Você poderia fazer isso usando o método Substring() assim:

$string = 'The quick brown fox jumped over the fence.'
$string.Substring(0,5)

O primeiro argumento a passar para o método Substring() é a posição do caractere mais à esquerda. Neste caso, o caractere mais à esquerda é T . O segundo argumento é a posição do caractere mais à direita. Neste caso, o caractere é q .

O método Substring() retorna todos os caracteres entre eles.

Aqui está um exemplo do mundo real:

Vamos dizer que temos um código de produto que tem o seguinte formato: XXXXVVVV-MM-DD-YYYY . Todos os produtos têm este formato de código e nunca se desviam dele. Agora, vamos dizer que o software de gerenciamento de inventário que gerou este código não incluiu um campo de data de criação no banco de dados.

No entanto, o software sempre colocou esta data como MM-DD-YYYY no próprio código do produto, então podemos inferir isso a partir do código do produto. Precisamos obter esta data para nossos produtos para criar algum relatório super-fancy, mas extremamente desnecessário para a administração mostrar quando cada produto foi inserido no banco de dados. Aqui está uma boa maneira de fazer isso.

$product_code = 'ABCD1234-11-12-2013'
$date_created = [DateTime]$product_code.SubString($product_code.Length-10)

Neste exemplo, estamos usando o método Substring() do PowerShell para o objeto de string inerente e passando o número do primeiro caractere que queremos encontrar como parâmetro.

Uma vez que não estamos especificando o caractere de parada, ele assume que queremos todos os caracteres até o final da string. Para encontrar o número em primeiro lugar, primeiro obtemos o comprimento de todo o código do produto e simplesmente subtraímos 10 disso. Neste exemplo, isso significa que queremos começar no 10º caractere da direita da string e tudo à direita disso.

O tipo [DateTime] não necessariamente se encaixa no tópico de subcadeia da postagem, mas achei que combinaria bem com o exemplo específico.

Depois de obtermos nossa string de 11-12-2013, então a convertemos para um objeto [DateTime], que converte o que era uma string simples em um objeto útil. A partir daqui, podemos fazer toda a gestão de aritmética de datas que a gerência deseja e gerar esse relatório de gráfico de barras sofisticado!

Encontrando Dinamicamente uma Subcadeia Usando a Propriedade Length

No exemplo acima, você estava definindo estaticamente as posições de início e fim dos caracteres dentro da string. Mas e se você não souber a última posição?

Talvez você precise encontrar a subcadeia a partir dos últimos quatro caracteres. Você precisa encontrar o conjunto de caracteres da quarta posição até o final. A string em que você está procurando pode ter qualquer comprimento.

Em vez de definir a posição final como um número positivo que conta da esquerda, podemos especificar dinamicamente a posição final usando o comprimento da string e deduzindo um certo número de caracteres dele.

Usando a string acima `$product_code = ‘ABCD1234-11-12-2013’`, talvez você queira encontrar os últimos quatro caracteres. Em vez de fazer algo assim:

PS> $product_code = 'ABCD1234-11-12-2013'
PS> $product_code.SubString(0,4)
ABCD

Você pode substituir `0` por `$product_code.Length – 4` e nem usar a posição final e ele retornará os últimos quatro caracteres conforme mostrado abaixo.

PS> $product_code = 'ABCD1234-11-12-2013'
PS> $product_code.SubString($product_code.Length-4)
2013

Se você não especificar a posição final, o método de substring do PowerShell sempre será padrão para a última posição de caractere.

Usando a propriedade `length` da string, que é o número total de caracteres na string e deduzindo desse total permite que você selecione dinamicamente substrings.

Anunciando um Treinamento AO VIVO gratuito – Iniciando sua Jornada PowerShell – apresentado por Johan Arwidmark. Entenda como as habilidades do PowerShell aprimoram sua carreira de TI, aprenda por onde começar com o PowerShell, construa seus primeiros scripts e faça perguntas diretamente a Johan em um ambiente de treinamento ao vivo.

Source:
https://adamtheautomator.com/powershell-substring/