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()
, вот так:
Первый аргумент, который нужно передать методу Substring()
, – это позиция самого левого символа. В данном случае самый левый символ – T
. Второй аргумент – позиция самого правого символа. В данном случае символ – q
.
Метод Substring()
возвращает все символы между ними.
Вот пример из реальной жизни:
Допустим, у нас есть код продукта, который имеет следующий формат: XXXXVVVV-MM-DD-YYYY
. Все продукты имеют этот формат кода и никогда от него не отклоняются. Теперь предположим, что программное обеспечение управления запасами, которое создало этот код, не включило поле даты создания в базу данных.
Однако в программе всегда вставляется эта дата в виде MM-DD-YYYY
прямо в сам код продукта, так что мы можем вывести эту дату из кода продукта. Нам нужно получить эту дату для наших продуктов, чтобы создать какой-то супер-шикарный, но абсолютно необязательный отчет для руководства, чтобы показать, когда каждый продукт был вставлен в базу данных. Вот хороший способ сделать это.
В этом примере мы используем метод SubString()
в PowerShell для встроенного объекта строки и передаем число в качестве параметра для первого символа, который мы хотим найти.
Поскольку мы не указываем символ остановки, предполагается, что мы хотим все символы до конца строки. Чтобы найти число в первую очередь, мы сначала получаем длину всего кода продукта и просто вычитаем из нее 10. В этом примере это означает, что мы хотим начать с 10-го символа справа от строки и все символы справа от него.
Тип [DateTime]
не обязательно соответствует теме подстроки сообщения, но я подумал, что он хорошо впишется в конкретный пример.
После того, как мы получили нашу строку 11-12-2013, мы преобразуем ее в объект [DateTime]
, который превращает то, что когда-то было простой строкой, в хороший объект. Отсюда мы можем делать всю эту красивую арифметику дат, которую от нас хочет управление, и создавать этот красивый отчет в виде столбчатой диаграммы!
Динамическое нахождение подстроки с использованием свойства Length
В приведенном выше примере вы статически определяли начальную и конечную позиции символов внутри строки. Но что если вы не знаете последнюю позицию?
Возможно, вам нужно найти подстроку из последних четырех символов. Вам нужно найти набор символов с четвертой до последней позиции до конца. Строка, в которой вы ищете, может быть любой длины.
Вместо того чтобы определять конечную позицию как положительное число, которое считает с левой стороны, мы можем динамически указать конечную позицию, используя длину строки и вычитая из нее определенное количество символов.
Используя строку выше $product_code = 'ABCD1234-11-12-2013'
, возможно, вы хотите найти последние четыре символа. Вместо того, чтобы делать что-то подобное:
Вы можете заменить 0
на $product_code.Length - 4
и даже вообще не использовать конечную позицию, и это вернет последние четыре символа, как показано ниже.
Если вы не указываете конечную позицию, метод подстроки PowerShell всегда будет использовать последнюю позицию символа по умолчанию.
Использование свойства length
строки, которое представляет собой общее количество символов в строке, и вычитание из этого значения позволяет динамически выбирать подстроки.
Объявляем Бесплатное онлайн-обучение в прямом эфире – Начало вашего пути в PowerShell – представлено Йоханом Арвидмарком. Поймите, как навыки PowerShell улучшают вашу карьеру в области информационных технологий, узнайте, с чего начать с PowerShell, создайте свои первые сценарии и задавайте Йохану вопросы непосредственно в среде онлайн-обучения.