MyTetra Share
Делитесь знаниями!
Работа со строками в PowerShell
Время создания: 18.06.2015 14:07
Раздел: Компьютер - Windows - Windows Power Shell
Запись: xintrea/mytetra_syncro/master/base/14346256409vvqrge2tk/text.html на raw.github.com

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


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

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



"Hello World!"


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

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

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


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


"Hello World!"[6]


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

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

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


Пример:

"Hello World!".Chars(6)


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

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

Пример:


$a ="Hello"

$a


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

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

Например:


$a =$a+" World!"

$a

или

$a += " World!"

$a


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

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

  • "-eq" - (=) проверяет равны ли строки между собой
  • "-ne" - (≠) обратный оператору -eq проверяет неравенство строк
  • "-gt" - (>) больше ли одна строка чем другая
  • "-lt" - (<) меньше ли одна строка чем другая
  • "-le" - (≤) меньше или равна одна строка чем другая
  • "-ge" - (≥) больше или равна одна строка чем другая

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

"Hello World!" -eq "Hello World!"


1

"Hello World!" -eq  "Hello World!"

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

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

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

"Hello World!" -gt "Hello"


1

"Hello World!" -gt  "Hello"

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

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

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

"Hello World!" -Like "Hello*!"


1

"Hello World!" -Like  "Hello*!"

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

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

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

"Hello World!" -match "Hello[\D]*!"


1

"Hello World!" -match  "Hello[\D]*!"

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

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

$a = get-help Get-Help -detailed $a -match "http://.*/" $matches[0].split(";")


1

2

3

4

5

$a = get-help Get-Help -detailed

 

$a -match "http://.*/"

 

$matches[0].split(";")

Результатом выполнения данного скрипта будет следующий набор строк: @("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 являются объектами и строки тоже не являются исключениями.

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

"Hello World!" | gm


1

"Hello World!" | gm

 

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

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

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

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

("Hello World!").Clone()


1

("Hello World!").Clone()

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

 

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

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

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

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

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

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

("Hello World!").CompareTo("Hello");


1

("Hello World!").CompareTo("Hello");

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

("Hello World!").CompareTo("hello world!");


1

("Hello World!").CompareTo("hello world!");

будет -1.

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

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

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

[string]::Compare("Hello World!","hello world!",$True)


1

[string]::Compare("Hello World!","hello world!",$True)

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

 

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

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

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

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

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

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

("Hello World!").Contains("World")


1

("Hello World!").Contains("World")

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

 

 

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

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

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

например:

("Hello World!").EndsWith("World!")


1

("Hello World!").EndsWith("World!")

Результат True

 

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

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

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

Пример:

("Hello World!").StartsWith("Hello")


1

("Hello World!").StartsWith("Hello")

Результат True

 

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

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

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

Пример:

("Hello World!").Equals("Hello World!")


1

("Hello World!").Equals("Hello World!")

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

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

"Hello World!" -Eq "Hello World!"


1

"Hello World!" -Eq "Hello World!"

 

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

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

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

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

("Hello World!").GetHashCode()


1

("Hello World!").GetHashCode()

Будет: "-1989043627"

 

 

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

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

Синтаксис:

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

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

("Hello World!").IndexOf("World")


1

("Hello World!").IndexOf("World")

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

 

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

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

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

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

("Hello World!").LastIndexOf("o")


1

("Hello World!").LastIndexOf("o")

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

 

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

Синтаксис:

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

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

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

("Hello World!").IndexOfAny("World")


1

("Hello World!").IndexOfAny("World")

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

 

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

Синтаксис:

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

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

Пример:

("Hello World!").LastIndexOfAny("World")

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

 

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

Синтаксис:

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

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

Пример:

("Hello World!").Insert(11," of Warcraft")


1

("Hello World!").Insert(11," of Warcraft")

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

 

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

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

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

Пример:

"Hello World!".PadLeft(20,".")


1

"Hello World!".PadLeft(20,".")

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

 

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

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

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

Пример:

"Hello World!".PadRight(20,".")


1

"Hello World!".PadRight(20,".")

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

 

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

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

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

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

Пример:

("Hello World!").Remove(2)


1

("Hello World!").Remove(2)

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

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

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

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

Пример:

("Hello World!").Remove(4,2)


1

("Hello World!").Remove(4,2)

Результат: "HellWorld!"

 

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

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

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

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

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

Пример:

"Hello World!".Substring(3)


1

"Hello World!".Substring(3)

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

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

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

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

Пример:

"Hello World!".Substring(6,5)


1

"Hello World!".Substring(6,5)

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

 

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

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

Синтаксис:

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

Пример:

("Hello World!").Replace("Hello","Goodbye")


1

("Hello World!").Replace("Hello","Goodbye")

Результат "Goodbye World!"

 

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

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

Синтаксис:

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

Пример:

("Hello World !").Split(" ")


1

("Hello World !").Split(" ")

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

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

Пример:

"Hello World!".Split(@("o","e"))


1

"Hello World!".Split(@("o","e"))

Результатом будет массив строк :"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! ".Trim()


1

"           Hello World!         ".Trim()

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

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

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

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

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

Пример:

".........Hello World!........".Trim(".")


1

".........Hello World!........".Trim(".")

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

 

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

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

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

Пример:

"Hello World!".Length


1

"Hello World!".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()

("Hello World!").GetEnumerator()


1

("Hello World!").GetEnumerator()

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

 

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

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

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

("Hello World!").GetType()


1

("Hello World!").GetType()

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

 

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

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

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

("Hello World!").GetTypeCode()


1

("Hello World!").GetTypeCode()

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

 

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

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования