Поиск подстрок в PowerShell: Краткое руководство

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.

Связано: Изучите формат строки и расширение строк

Объявление о Бесплатном онлайн-обучении – Начните свой путь с PowerShell – представлено Йоханом Арвидмарком. Поймите, как навыки PowerShell могут повысить вашу карьеру в области информационных технологий, узнайте, с чего начать с PowerShell, создайте свои первые сценарии и задайте вопросы Йохану непосредственно в среде онлайн-обучения.

PowerShell и строки

В мире PowerShell строка состоит из набора символов, заключенных в одинарные или двойные кавычки. Строки, такие как "foo" и 'bar', являются чрезвычайно распространенными.

Связано: Возвращение к основам: Строки PowerShell

Допустим, вы определили строку в переменной и хотите найти в ней часть? Например, предположим, у вас есть строка с адресом, например, 1234 4th St. Вы хотели бы извлечь номер и знать, что первые четыре символа всегда будут нужным вам номером. В этом случае вы можете использовать метод substring() в PowerShell.

Использование метода SubString в PowerShell

Чтобы найти строку внутри строки с помощью PowerShell, вы можете использовать метод Substring(). Этот метод присутствует в каждом объекте строки в PowerShell.

Например, возможно, у вас есть строка вроде The quick brown fox jumped over the fence., и вы хотели бы найти первые пять символов. Вы можете сделать это, используя метод Substring(), вот так:

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

Первый аргумент, который нужно передать методу Substring(), – это позиция самого левого символа. В данном случае самый левый символ – T. Второй аргумент – позиция самого правого символа. В данном случае символ – q.

Метод Substring() возвращает все символы между ними.

Вот пример из реальной жизни:

Допустим, у нас есть код продукта, который имеет следующий формат: XXXXVVVV-MM-DD-YYYY. Все продукты имеют этот формат кода и никогда от него не отклоняются. Теперь предположим, что программное обеспечение управления запасами, которое создало этот код, не включило поле даты создания в базу данных.

Однако в программе всегда вставляется эта дата в виде MM-DD-YYYY прямо в сам код продукта, так что мы можем вывести эту дату из кода продукта. Нам нужно получить эту дату для наших продуктов, чтобы создать какой-то супер-шикарный, но абсолютно необязательный отчет для руководства, чтобы показать, когда каждый продукт был вставлен в базу данных. Вот хороший способ сделать это.

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

В этом примере мы используем метод SubString() в PowerShell для встроенного объекта строки и передаем число в качестве параметра для первого символа, который мы хотим найти.

Поскольку мы не указываем символ остановки, предполагается, что мы хотим все символы до конца строки. Чтобы найти число в первую очередь, мы сначала получаем длину всего кода продукта и просто вычитаем из нее 10. В этом примере это означает, что мы хотим начать с 10-го символа справа от строки и все символы справа от него.

Тип [DateTime] не обязательно соответствует теме подстроки сообщения, но я подумал, что он хорошо впишется в конкретный пример.

После того, как мы получили нашу строку 11-12-2013, мы преобразуем ее в объект [DateTime], который превращает то, что когда-то было простой строкой, в хороший объект. Отсюда мы можем делать всю эту красивую арифметику дат, которую от нас хочет управление, и создавать этот красивый отчет в виде столбчатой диаграммы!

Динамическое нахождение подстроки с использованием свойства Length

В приведенном выше примере вы статически определяли начальную и конечную позиции символов внутри строки. Но что если вы не знаете последнюю позицию?

Возможно, вам нужно найти подстроку из последних четырех символов. Вам нужно найти набор символов с четвертой до последней позиции до конца. Строка, в которой вы ищете, может быть любой длины.

Вместо того чтобы определять конечную позицию как положительное число, которое считает с левой стороны, мы можем динамически указать конечную позицию, используя длину строки и вычитая из нее определенное количество символов.

Используя строку выше $product_code = 'ABCD1234-11-12-2013', возможно, вы хотите найти последние четыре символа. Вместо того, чтобы делать что-то подобное:

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

Вы можете заменить 0 на $product_code.Length - 4 и даже вообще не использовать конечную позицию, и это вернет последние четыре символа, как показано ниже.

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

Если вы не указываете конечную позицию, метод подстроки PowerShell всегда будет использовать последнюю позицию символа по умолчанию.

Использование свойства length строки, которое представляет собой общее количество символов в строке, и вычитание из этого значения позволяет динамически выбирать подстроки.

Объявляем Бесплатное онлайн-обучение в прямом эфире – Начало вашего пути в PowerShell – представлено Йоханом Арвидмарком. Поймите, как навыки PowerShell улучшают вашу карьеру в области информационных технологий, узнайте, с чего начать с PowerShell, создайте свои первые сценарии и задавайте Йохану вопросы непосредственно в среде онлайн-обучения.

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