|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Работа со строками в 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". Пример: "Hello World!" -eq "Hello World!"
Результат будет True, так как строки идентичны. Операторы же -gt, -lt, -le, -ge по сути могут помочь определить начинается ли данная строка подстрокой, пример: Например так:
Результатом будет True. Однако логичнее для этого использовать метод самой строки StartsWith о нём написано ниже. Так же есть методы сравнения -like и -match Оператор -like использует для сравнения шаблоны, как часто применялись в конадной строке дос, например: "Hello World!" -Like "Hello*!"
Результатом будет : True Оператор -match использует регулярные выражения .NET. Что существенно увеличивает возможности данного метода. Предыдущий пример мог бы выглядеть например так: "Hello World!" -match "Hello[\D]*!"
Результатом будет : True При этом, в переменной $matches хранятся значения совпадений данного регулярного выражения. Это даёт большие возможности. Рассмотрим пример, как получить все строчки с ссылками из текста: $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 являются объектами и строки тоже не являются исключениями. Рассмотрим методы которые можно применить, для строк:
Clone - копия объекта. Результатом метода будет точная копия данного объекта. Его синтаксис: [String]=[Строка].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 world!");
будет -1. Что бы сравнить две строки без учёта регистра, то надо воспользоваться методом .NET: [string]::Compare([строка 1], [строка 2], [игнорировать ли регистр]) Сравним им строчки "Hello World!" и "hello world!" [string]::Compare("Hello World!","hello world!",$True)
Результатом будет 0, то есть две строки равны.
Contains - Нахождение подстроки Данный метод поможет посмотреть, является ли данная строка подстрокой. синтаксис метода такой: [bool] = [строка 1].Contains([строка 2]) Результатом данного метода будет булевое значение, которое будет равно 0 если строка 2 будет являтся подстрокой строки 1. Рассмотрим пример: ("Hello World!").Contains("World")
результатом данного выражение будет значение "True". Однако данный метод чувствителен к регистру.
EndsWith - Заканчивается ли строка подстрокой Синтаксис данного метода [bool] = [строка 1].EndsWith([строка 2]) Данный метод определит, заканчивается ли строка 1 - строкой 2. например: ("Hello World!").EndsWith("World!")
Результат True
StartsWith - начинается ли строка с подстроки Синтаксис данного метода [bool] = [строка 1].StartsWith([строка 2]) Аналогично EndsWith данный метод определит начинается ли строка 1 со строки 2. Пример: ("Hello World!").StartsWith("Hello")
Результат True
Equals - сравнение двух строк данный метод позволяет сравнить строки: [bool] = [строка 1].Equals([строка 2]) Пример: ("Hello World!").Equals("Hello World!")
Результатом данной операции будет True Однако это удобнее записать так: "Hello World!" -Eq "Hello World!"
GetHashCode- получить Hash Code строки Синтаксис этого метода: [int] = [строка 1].GetHashCode() Результатом выполнения Метода, на строке "Hello World!" : ("Hello World!").GetHashCode()
Будет: "-1989043627"
IndexOf - индекс начала вхождения подстроки. Данный метод позволяет получить индекс первого символа вхождения подстроки в строку: Синтаксис: [int] = [строка 1].IndexOf([строка 2]) Рассмотрим пример: ("Hello World!").IndexOf("World")
Результатом выполнения данного скрипта, будет "6". Так как нумерация строки начинается с нулевого символа.
LastIndexOf - Последнее вхождение подстроки В отличии от IndexOf показывает не первое значение входа подстраки а последнее , синтаксис этого метода: [int]=[строка 1].LastIndexOf([строка 2]) Рассмотрим пример: ("Hello World!").LastIndexOf("o")
Результатом будет значение 7.
IndexOfAny - первое вхождение любого символа из подстроки в строке. Синтаксис: [int] = [строка 1].IndexOfAny([строка 2]) Данный метод позволит получить первое вхождение любого символа из строки 2 в строке 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")
Результатом выполнения данного скрипта будет строка : "Hello World of Warcraft!"
PadLeft - дополнить строку символами с лева Что бы дополнить строку до определённого кол-ва символов. Если мы хотим, что бы символы дополнялись с лева, можно воспользоваться командой PadLeft её синтаксис: [String] = [строка 1].PadLeft([размер строки],[символ которым заполнять]) Пример: "Hello World!".PadLeft(20,".")
Результатом данной команды будет строка: "........Hello World!"
PadRight - дополнить строку символами с права Аналогично, как и PadLeft дополняет строку до указанного размера, символами, добавляя их с права. Синтаксис: [String] = [строка 1].PadRight([размер строки],[символ которым заполнять]) Пример: "Hello World!".PadRight(20,".")
Результат данной команды будет строка : 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].Remove([начальная позиция],[кол-во символов]) Тогда результатом данного метода будет подстрока сформированная из строки 1 содержащая указанное кол-во символов и начинающаяся с указанной позиции. Пример:
Результатом будет строка "World"
Replace - найти подстроку и заменить на свою Данный метод позволяет заменить все вхождения подстроки в строке, на другую подсроку. Синтаксис: [String] = [строка 1].Replace([старая подстрока],[новая подстрока]) Пример: ("Hello World!").Replace("Hello","Goodbye")
Результат "Goodbye World!"
Split - разбить строку на массив строк. Иногда строку легче обрабатывать массивом, для этого есть метод Split. Он позволяет разбить строку на массив подстрок с помощью разделяющего символа или группу символов. Синтаксис: [string[] ]= [строка 1].Split([разделяющий символ]) Пример:
результатом будет массив строк"Hello","World,!" Если нам нужно указать не один разделитель а несколько, укажите перечисление: Пример: "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!" Если же мы хотим удалить не пробел, то этот символ надо ввести в параметр метода. Синтаксис: [String]=[строка 1].Trim([удаляемый символ]) [String]=[строка 1].TrimLeft([удаляемый символ]) [String]=[строка 1].TrimRight([удаляемый символ]) Пример: ".........Hello World!........".Trim(".")
Результатом данной команды будет строка "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() ("Hello World!").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() ("Hello World!").GetTypeCode()
Результатом будет объект типа System.TypeCode со значением String
Говоря о строках, нельзя не упомянуть о командлете Select-String данный командлет является достойной альтернативой Grep в Unix он позволяет искать строки используя регулярные выражения .NET. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Так же в этом разделе:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|