Строки в PowerShell

Результатом выполнения команда в PowerShell являются объекты. Поэтому работ со строками сильно по уменьшилось. Но иногда приходится обрабатывать и текст.

Начнём с того, что получить строку в PowerShell довольно легко. Так например что бы получить и вывести строку: «Hello World!». Надо выполнить следующую команду:

Строки Нумирация символов в строке начинается с нулевого символа.  Максимальная длина строки в PowerShell зависит от характеристики компьютера. Так на XP она состовляет с 4 гигами оперативной памяти она составляет 151.001.191 символ, а на 8.1 с 8 Гб оперативной памяти до 1.073.741.791 символов.

Обратится к конкретному символу строки можно по следующему шаблону:

(строка) [номер символа]

Например результатом команды :

Будет символ W, это седьмой символ в строке, но нумерация начинается с нуля.

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

[строка].Chars([номер символа])

Пример:

«Hello World!».Chars(6)

Результатом данной команды будет так же символ W.

Что бы присвоить переменной значение , надо воспользоваться оператором =

Пример:

В результате на консоль будет выведена строка «Hello»

Так же можно склеивать строки с помощью оператора +

Например:

или

В результате на консоле будет выведена строка «Hello World!»

Так же со строками можно применять операторы сравнения, такие как

«-eq» — (=) проверяет равны ли строки между собой

«-ne» — (≠) обратный оператору -eq проверяет неравенство строк

«-gt» — (>) больше ли одна строка чем другая

«-lt» — (<) меньше ли одна строка чем другая

«-le» — (≤) меньше или равна одна строка чем другая

«-ge» — (≥) больше или равна одна строка чем другая

Самым часто используемым оператором среди них это «-eq». Пример:

Результат будет True, так как строки идентичны.

Операторы же -gt, -lt, -le, -ge по сути могут помочь определить начинается ли данная строка подстрокой, пример:

Например так:

Результатом будет True. Однако логичнее для этого использовать метод самой строки StartsWith о нём написано ниже.

Так же есть методы сравнения -like и -match

Оператор -like использует для сравнения шаблоны, как часто применялись в конадной строке дос, например:

Результатом будет : True

Оператор -match использует регулярные выражения .NET. Что существенно увеличивает возможности данного метода.

Предыдущий пример мог бы выглядеть например так:

Результатом будет : True

При этом, в переменной $matches хранятся значения совпадений данного регулярного выражения. Это даёт большие возможности. Рассмотрим пример, как получить все строчки с ссылками из текста:

Результатом выполнения данного скрипта будет следующий набор строк: @(«http://schemas.microsoft.com/maml/2004/10», «xmlns:command=http://schemas.microsoft.com/maml/dev/command/2004/10″,»xmlns:dev=http://schemas.microsoft.com/maml/dev/2004/10″,»xmlns:MSHelp=http://msdn.microsoft.com/»)

Надо отметить утверждение о том, что все объекты в PowerShell являются объектами и строки тоже не являются исключениями.

Рассмотрим методы которые можно применить, для строк:

 

Clone — копия объекта.

Результатом метода будет точная копия данного объекта.

Его синтаксис: [String]=[Строка].Clone()

Например результатом данной команды:

Будет строка «Hello World!».

 

CompareTo — сравнение двух строк

Вызывается он [int]= [1 строка].CompareTo([2 строка])

Результат данного метода 0 — тогда строки совпадают. Могут ещё быть -1 и 1.

-1 означает, что строка 1 меньше строки 2.

1 означет, что строка 1 больше строки 2

Например результатом данного выражения:

будет 1, а выражения

будет -1.

Что бы сравнить две строки без учёта регистра, то надо воспользоваться методом .NET:

[string]::Compare([строка 1], [строка 2], [игнорировать ли регистр])

Сравним им строчки «Hello World!» и «hello world!»

Результатом будет 0, то есть две строки равны.

 

Contains — Нахождение подстроки

Данный метод поможет посмотреть, является ли данная строка подстрокой.

синтаксис метода такой:

[bool] = [строка 1].Contains([строка 2])

Результатом данного метода будет булевое значение, которое будет равно 0 если строка 2 будет являтся подстрокой строки 1.

Рассмотрим пример:

результатом данного выражение будет значение «True». Однако данный метод чувствителен к регистру.

 

 

EndsWith — Заканчивается ли строка подстрокой

Синтаксис данного метода [bool] = [строка 1].EndsWith([строка 2])

Данный метод определит, заканчивается ли строка 1  — строкой 2.

например:

Результат True

 

StartsWith — начинается ли строка с подстроки

Синтаксис данного метода [bool] = [строка 1].StartsWith([строка 2])

Аналогично EndsWith  данный метод определит начинается ли строка 1 со строки 2.

Пример:

Результат True

 

Equals — сравнение двух строк

данный метод позволяет сравнить строки:

[bool] = [строка 1].Equals([строка 2])

Пример:

Результатом данной операции будет True

Однако это удобнее записать так:

 

GetHashCode- получить Hash Code строки

Синтаксис этого метода:

[int] = [строка 1].GetHashCode()

Результатом выполнения Метода, на строке «Hello World!» :

Будет: «-1989043627»

 

 

IndexOf — индекс начала вхождения подстроки.

Данный метод позволяет получить индекс первого символа вхождения подстроки в строку:

Синтаксис:

[int] = [строка 1].IndexOf([строка 2])

Рассмотрим пример:

Результатом выполнения данного скрипта, будет  «6». Так как нумерация строки начинается с нулевого символа.

 

LastIndexOf — Последнее вхождение подстроки

В отличии от IndexOf показывает не первое значение входа подстраки а последнее , синтаксис этого метода:

[int]=[строка 1].LastIndexOf([строка 2])

Рассмотрим пример:

Результатом будет значение 7.

 

IndexOfAny — первое вхождение любого символа из подстроки в строке.

Синтаксис:

[int] = [строка 1].IndexOfAny([строка 2])

Данный метод позволит получить первое вхождение любого символа из строки 2 в строке 1

Рассмотрим пример:

Результатом будет 2, так как l присутствует и в слове World

 

LastIndexOfAny  — последнне вхождение любого символа из подстроки в строке.

Синтаксис:

[int] = [строка 1].LastIndexOfAny([строка 2])

Анологично IndexOfAny ищет значение входа символов подстроки в строке, но выводит не первое вхождение, а последнее

Пример:

(«Hello World!»).LastIndexOfAny(«World»)

результатом данной команды будет 10, и это символ «d «.

 

Insert — Вставить в строку, подстроку.

Синтаксис:

[String]= [строка 1].Insert([Номер символа],[строка 2])

Результатом данного метода будет строка содержащая строку 2 начиная с символа «Номер символа»

Пример:

Результатом выполнения данного скрипта будет строка : «Hello World of Warcraft!»

 

PadLeft — дополнить строку символами с лева

Что бы дополнить строку до определённого кол-ва символов. Если мы хотим, что бы символы дополнялись с лева, можно воспользоваться командой PadLeft её синтаксис:

[String] =  [строка 1].PadLeft([размер строки],[символ которым заполнять])

Пример:

Результатом данной команды будет строка: «……..Hello World!»

 

PadRight — дополнить строку символами с права

Аналогично, как и PadLeft дополняет строку до указанного размера, символами, добавляя их с права. Синтаксис:

[String] =  [строка 1].PadRight([размер строки],[символ которым заполнять])

Пример:

Результат данной команды будет строка : Hello World!……..

 

Remove — позволяет удалять из строки подстроки

Метод Remove перегружен и может использоваться в следующих синтаксисах:

[String] = [строка 1].Remove([кол-во символов])

результатом данной команды будет строка содержащая подстроку начиная с 0 символа строки 1 и заканчивая символом указанному в методе.

Пример:

Результатом будет строка: «He»

Если же воспользоваться синтаксисом:

[String] = [строка 1].Remove([начальная позиция],[кол-во символов])

То результатом данной команды будет строка сформированная из строки 1, но в ней не будет содержаться указанное кол-во символов, начиная с начальная позиция.

Пример:

Результат: «HellWorld!»

 

Substring — позволяет получить подстроку из строки

Метод Substring является кординально противоположный, чем метод Remove

Он так же перегружен и может использоватся в двух вариациях.

[String] = [строка 1].Substring([кол-во символов])

Результатом данной команды будет подстрока образованная из строки 1 путём удаления данное кол-во символов.

Пример:

Результатом данной команды будет строка: «lo World!»

Так же существует другой синтаксис:

[String] = [строка 1].Substring([начальная позиция],[кол-во символов])

Тогда результатом данного метода будет подстрока сформированная из строки 1 содержащая указанное кол-во символов и начинающаяся с указанной позиции.

Пример:

Результатом будет строка «World»

 

Replace — найти подстроку и заменить на свою

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

Синтаксис:

[String] = [строка 1].Replace([старая подстрока],[новая подстрока])

Пример:

Результат «Goodbye World!»

 

Split — разбить строку на массив строк.

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

Синтаксис:

[string[] ]= [строка 1].Split([разделяющий символ])

Пример:

результатом будет массив строк»Hello»,»World,!»

Если нам нужно указать не один разделитель а несколько, укажите перечисление:

Пример:

Результатом будет массив строк :»H»,»ll»,» W»,»rld!»

Trim, TrimLeft, TrimRight — удаляем одинаковые символы по бокам страницы

Иногда нужно удалить повторяющиеся символы по бокам строки. Очень часто такими символами являются пробелы, для этого существует метор Trim он существует в следующих вариациях Trim, TrimLeft, TrimRight они отличаются областью действия, Trim отбрасывает не нужные символы с двух сторон строки, TrimLeft — только с лева, TrimRight — только с права.

что бы убрать лишние пробелы можно воспользоваться следующим синтаксисом:

[String]=[строка 1].Trim()

[String]=[строка 1].TrimLeft()

[String]=[строка 1].TrimRight()

Пример:

Результатом данной команды будет строка «Hello World!»

Если же мы хотим удалить не пробел, то этот символ надо ввести в параметр метода. Синтаксис:

[String]=[строка 1].Trim([удаляемый символ])

[String]=[строка 1].TrimLeft([удаляемый символ])

[String]=[строка 1].TrimRight([удаляемый символ])

Пример:

Результатом данной команды будет строка «Hello World!»

 

Свойство Length — позволяет определить размер строки

Что бы посмотреть размер строки, надо воспользоваться свойством Length. Синтаксис:

[int] = [строка].Length

Пример:

Результатом команды будет число 12

 

Преобразования строк в различные типы

У строки так же имеется ряд методов, которые конвертируют данные из  строки в различные типы. Эти свойства ToBoolean, ToByte, ToChar,  ToCharArray, ToDateTime, ToDecimal, ToDouble, ToInt16, ToInt32, ToInt64, ToLower, ToLowerInvariant, ToSByte, ToSingle, ToString, ToType, ToUInt16, ToUInt32, ToUInt64, ToUpper, ToUpperInvariant

 

GetEnumerator — получить перечисление

Полученить перечисление из строки.

Синтаксис этого метода:

[System.CharEnumerator] = [строка 1].GetEnumerator()

Результатом данного метода будет перечисление @(‘H’,’e’,’l’,’l’,’o’,’ ‘,’W’,’o’,’r’,’l’,’d’,’!’)

 

GetType — получить тип объекта

Так как мы рассматриваем строки то возращаемый тип строки это String

Синтаксис:[System.RuntimeType] =  [строка 1].GetType()

Результатом будет объект System.RuntimeType со значением типа String

 

GetTypeCode — получить код типа объекта

Получить тип объекта, если мы работаем со строками то тип будет String.

Синтаксис: [System.TypeCode] = [строка 1].GetTypeCode()

Результатом будет объект типа System.TypeCode со значением String

 

Говоря о строках, нельзя не упомянуть о командлете Select-String данный командлет является достойной альтернативой Grep в Unix он позволяет искать строки используя регулярные выражения .NET. Но рассматривать его лучше вместе с регулярными выражениями.

 

 

Комментарии:

Комментарии 6

  • Split — разбить строку на массив строк
    $fio=»Иваноф Ифан Иоанович Оглы»
    $f=$fio.Split(» «,3)[0] # Иваноф
    $i=$fio.Split(» «,3)[1] # Ифан
    $o=$fio.Split(» «,3)[-1] # Иоанович Оглы

  • Подскажите, пожалуйста, а как, например, в документе из 20 строк, найти 15ую и вставить после n-го символа содержание переменной?

    • Давно я не отвечал на этом сайте…увлёкся 3д печатью, но не мог пропустить вопрос про powershell. ^)
      и так содержимое файла:

      Запихиваем его в переменную(массив)$t

      Смотрим что там на 15 строчке:

      Пойдёт 🙂
      Вставляем бред вида » t» после 3 символа:

      Ну как? запихнулось?

      Да всё хорошо…
      Записываем это всё в файл:

      Ну и как там теперь файл?

      Файлу хорошо 🙂

  • Спасибо большое, добрый человек!

  • В описании к Substring указан пример с Remove. Наверное «copy-paste» )
    [String] = [строка 1].Remove([начальная позиция],[кол-во символов])

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *