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 no PowerShell – apresentado por Johan Arwidmark. Entenda como as habilidades no PowerShell aprimoram sua carreira de TI, aprenda por onde começar com o PowerShell, desenvolva 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 cercados por aspas simples ou duplas. Strings como "foo" e 'bar' são extremamente comuns.

Relacionado: De Volta aos Fundamentos: Strings no PowerShell

Vamos dizer que você definiu uma string em uma variável e precisa encontrar apenas 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 saber que os primeiros quatro caracteres sempre serão o número de que você precisa. Nesse 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 cada objeto de string no PowerShell.

Por exemplo, talvez você tenha uma sequência como O rápido e astuto raposa marrom pulou sobre a cerca. Você gostaria de encontrar os primeiros cinco caracteres. Você pode 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 ser passado 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 supor que temos um código de produto com o seguinte formato: XXXXVVVV-MM-DD-AAAA. Todos os produtos têm esse formato de código e nunca se desviam dele. Agora, suponha que o software de gerenciamento de inventário que gerou esse código não incluiu um campo de data de criação no banco de dados.

No entanto, o software sempre colocava esta data como MM-DD-AAAA 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 a fim de criar um relatório super sofisticado, mas extremamente desnecessário, para a administração, mostrando 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.

Desde que não estamos especificando o caractere de parada, assume-se que queremos todos os caracteres até o final da string. Para encontrar o número no primeiro lugar, primeiro obtemos o comprimento do código do produto inteiro e simplesmente subtrai 10 desse valor. Neste exemplo, isso significa que queremos começar no décimo caractere da direita para a string e tudo à direita disso.

O tipo [DateTime] não necessariamente combina com o tópico de substring do post, mas eu pensei que se encaixaria bem com o exemplo específico.

Depois de obtermos nossa string de 11-12-2013, a convertemos para um objeto [DateTime], que transforma o que era uma simples string em um objeto útil. A partir daqui, podemos realizar todas as operações de data avançadas que precisamos e gerar esse relatório de gráfico de barras sofisticado!

Encontrando Dinamicamente uma Substring Usando a Propriedade de Comprimento

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 substring dos últimos quatro caracteres. Você precisa encontrar o conjunto de caracteres da quarta posição a partir do final 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 subtraindo 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 mesmo usar a posição final e ele retornará os últimos quatro caracteres como 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 do caractere.

Usando a propriedade length da string, que é o número total de caracteres na string e subtraindo dessa contagem permite que você escolha 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, crie seus primeiros scripts e faça perguntas diretamente ao Johan em um ambiente de treinamento ao vivo.

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