Заметки о Windows и других программных продуктах Microsoft...

Работа со строками в PowerShell

Работа со строками в PowerShell

Результатом работы команды в PowerShell всегда является не текст, а объект. Это касается и работы с текстом. Каждая строка является отдельным объектом со своими свойствами и методами, которыми можно пользоваться для обработки текста.

Для примера создадим переменную, в которую поместим строку, а затем выведем ее свойства и методы:

$string = ″My name is Kirill″
$string | Get-Member

свойства и методы строки

Свойства

Начнем со свойств, которых у строки оказалось немного — всего два. Свойство Length содержит длину строки, или количество символов:

$string.Length

А свойство Chars позволяет обращаться к любому символу в строке по его номеру, например:

$string.Chars(4)

свойства строки

 

Кстати, к символам в строке можно обращаться без использования Chars, а как к элементам массива, по индексу:

$string[4]

А если указать отрицательное число, то массив будет перебираться с конца:

$string[-4]

Также кроме одного символа можно указать диапазон, например:

$string[0..2]
$string[-17..-15]

обращение к элементам строки

Методы

Теперь возьмем строку и начнем над ней издеваться приступим к методам.

Метод Insert служит для вставки подстроки в исходную строку, начиная с указанного символа. Для примера вставим ″ .N″ в конец строки (после 17 символа):

$string.Insert(17,″ .N″)

Метод Remove удаляет символы из строки начиная с указанного символа, например:

$string.Remove(10)

Метод Replace находит в исходной строке подстроку и заменяет ее на другую, например:

$string.Replace(″Kirill″,″Vasya″)

методы insert, remove и replace

 

Метод Split разбивает строку на массив строк с помощью разделяющего символа или группы символов. Например так мы разобьем строку, используя в качестве разделителя пробел:

$string.Split(″″)

А так укажем в качестве разделителя букву е:

$string.Split(″е″)

Если необходимо указать несколько разделителей, то достаточно просто перечислить их через запятую:

$string.Split(″е″,″i″)

метод split

 

Метод Substring позволяет получить подстроку, сформированную из исходной строки. Есть два варианта использования этого метода. К примеру результатом выполнения следующей команды будет строка, полученная путем удаления из исходной строки заданного количества символов:

$string.Substring(11)

А таким способом мы получим подстроку, сформированную из исходной строки,  начинающуюся с указанной позиции (8) и содержащую указанное количество символов (9):

$string.Substring(8,9)

метод substring

 

Метод Clone создает точную копию исходного объекта, например:

$string2 = $string.Clone()

Метод CompareTo производит сравнение двух строк и выдает 0, если строки совпадают:

$string.CompareTo($string2)

В случае несовпадения метод может выдать -1 (если первая строка больше второй) или 1 (если первая строка меньше второй). Также при использовании этого метода стоит учитывать, что регистр символов влияет на результат сравнения. Если необходимо сравнить строки без учета регистра, то можно воспользоваться статическим методом Compare, о котором чуть позже.

Метод Equals также сравнивает две строки и в зависимости от результата возвращает True или False:

$string.Equals($string2)

Кстати, такой же результат получается при использовании оператора сравнения -eq:

$string -eq $string2

методы clone, compareto и equals

 

Метод Contains проверяет наличие в строке указанной подстроки, и в зависимости от результата возвращает True или False. Например:

$string.Contains(″Kirill″)

Метод StartsWith проверяет, начинается ли строка с указанной подстроки:

$string.StartsWith(″My″)

а метод EndsWith проверяет, заканчивается ли исходная строка подстрокой:

$string.EndsWith(″Vasya″)

Обратите внимание, что эти методы также чувствительны к регистру символов.

методы contains, startwith, endwith

 

Говоря о зависимости от регистра символов, стоит упомянуть еще два метода. Метод ToUpper переводит исходную строку в верхний регистр:

$string.ToUpper()

а метод ToLower соответственно в нижний:

$string.ToLower()

методы toupper и tolower

 

С их помощью можно избавиться от регистрозависимости, например при поиске или сравнении:

$string.ToLower().EndsWith(″kirill″)

избавление от регистрозависимости

 

Метод IndexOf находит индекс начала вхождения подстроки в исходной строке. Например, создадим строковую переменную:

$string = ″substring one, substring two, substring three″

Теперь выведем индекс начала вхождения подстроки (substring):

$string.IndexOf(″substring″)

Как видите, метод выдал 0 — это номер первого символа (substring one, substring two, substring three) в исходной строке.

Метод LastIndexOf показывает индекс последнего вхождения подстроки, т.е. номер начала последнего вхождения указанной подстроки в исходной строке. Например, следующая команда выдаст 30 — номер последнего символа (substring one, substring two, substring three) в строке:

$string.LastIndexOf(″substring″)

методы indexof и lastindexof

 

Метод IndexOfAny возвращает первое, а метод LastIndexOfAny — последнее вхождение любого символа из подстроки в исходной строке. Например:

$string.IndexOfAny(″substring″)

Эта команда, как и в случае с IndexOf выдаст 0 — номер первого символа (s) в строке. А так мы получим 42 — номер последнего символа подстроки (substring one, substring two, substring three) в строке:

$string.LastIndexOfAny(″substring″)

методы indexofany и lastindexofany

 

Методы PadLeft и PadRight позволяют дополнить исходный текст до нужного количества символов слева или справа. Для примера создадим новую переменную $string и посмотрим ее длину:

$string = ″my name is Vasya Pupkin″
$string.Length

Как видите, строка содержит 23 символа. Дополним ее точками до 26 символов слева:

$string = $string.PadLeft(26,″.″)

а получившуюся строку дополним знаками вопроса до 30 символов справа:

$string = $string.PadRight(30,″?″)

В принципе, процесс можно не разбивать на части, а дополнить сразу с двух сторон:

$string = $string.PadLeft(26,″.″).PadRight(30,″?″)

методы padleft и padright

 

Методы TrimStart, TrimEnd и Trim обрезают повторяющиеся символы по бокам строки. TrimStart обрезает символы в начале, TrimEnd в конце строки, а Trim — с обоих сторон сразу. В качестве примера возьмем получившуюся в прошлый раз строку и обрежем лишние точки в начале:

$string = $string.TrimStart(″.″)

и лишние знаки вопроса в конце:

$string = $string.TrimEnd(″?″)

методы trimstart и trimend

 

Немного о типах данных. Текущий тип данных можно посмотреть с помощью метода GetType, например:

$a = ″string
$a.GetType()

В поле Name указан тип данных String (строка).

метод gettype

 

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

$b = $a.ToCharArray()

Если теперь проверить тип данных, то вместо String мы увидим тип Char[].

метод tochararray

 

Преобразовать тип данных можно и с помощью статического метода Convert. Для примера создадим переменную, содержащую строку, а затем преобразуем ее в число (Int32);

$string = ″123″
$int = [convert]::ToInt32($string)

статический метод convert

Статические методы

Кроме обычных к строке можно применять статические методы. Вывести их список можно все той же командой Get-Member с ключом -Static.

статические методы строки

 

Методов много, поэтому коротко пробежимся по некоторым из них.

Метод Concat используется для объединения нескольких строк. В качестве примера создадим три стоковых переменных и объединим их:

$a = ″one″
$b = ″two″
$c = ″three″
[string]::Concat($a,$b,$c)

Метод Join также объединяет несколько строк, но с использованием заданного разделителя. Например, объединим строки используя в качестве разделителя двоеточие:

[string]::Join(″:″,$a,$b,$c)

статические методы concat и join

 

Метод Copy создает точную копию исходной строки:

$string2 = [string]::Copy($string)

Метод Compare производит сравнение двух строк и выдает 0 при их совпадении или 1\-1 при несовпадении, аналогично методу CompareTo:

[string]::Compare($string,$string2,$true)

Метод Equals также производит сравнение и выдает результат в виде True\False:

[string]::Equals($string,$string2)

статические методы compare и equals

 

Метод Compare отличается одним моментом — он позволяет сравнивать строки без учета регистра символов. Для этого в нем используется переключатель $true (без учета регистра) или $false (с учетом регистра). Для примера создадим две переменных, отличающихся только регистром символов:

$a = ″string″
$b = ″String″

А теперь сравним их. Эта команда покажет, что строки идентичны:

[string]::Compare($a,$b,$true)

А эта — что они различаются:

[string]::Compare($a,$b,$false)

использованием регистрозависимости и без

 

И еще пара интересных методов для проверки строк.  Метод IsNullOrEmpty проверяет наличие строки, а также не является ли она пустой строкой:

$string = ″″
[string]::IsNullOrEmpty($string)

Метод IsNullOrWhiteSpace тоже проверяет наличие строки, а также то, что строка содержит только white-space символы (пробел, табуляция, символ новой строки и т.п.):

[string]::IsNullOrWhiteSpace($string)

проверка на пустую строку

 

На этом пожалуй закончим со строками и их свойствами и методами. Если вдруг 🙂 стало интересно, то более подробно узнать обо свойствах и методах строк в .Net  можно на MSDN по адресу https://msdn.microsoft.com/ru-ru/library/system.string(v=vs.110).aspx

 
 
Комментарии
Сергей

Спасибо за объяснение на доступном языке,ничего лишнего.

Дмитрий

А если надо удалить символ » в строчке. То какой должен быть синтаксис?

А если нужно ПРОСТО найти в результате выполнения командлета определённую подстроку. Ну, вот просто найти в наборе строк, которые командлет выводит на экран нечто определённое. И всё. Любого командлета, любую подстроку. Это также полное исследование свойств и методов проводить каждый раз???

$str = «Hello World»
Select-String -InputObject $str -SimpleMatch «hello»,»idk»

bammbr — IT это не твое )))

Кирилл

Статья полезная. Я вот только понять не могу, везде говорится про split и ее работу, но нигде нет примеров как полученные раздельные строки запихнуть в переменные. Делю строку ведь не просто так, а чтобы работать с данными.

Александр

Тут у вас ошибка: $string.Split(″е″,″i″)
Должно быть так: $string.Split(″еi″)

Ответить