Работа с низове в PowerShell

Работа с низове в PowerShell

Резултатът от изпълнението на команда в PowerShell са обекти. Поради това работата със стрингове значително намаля. Но понякога трябва да обработите текста.

Да започнем с това, че получаването на низ в PowerShell е доста лесно. Така например, за да получите и покажете низа: "Hello World!". Трябва да изпълните следната команда:

Номерирането на символите в низ започва с нулев знак. Максималната дължина на низа в PowerShell зависи от характеристиките на компютъра. И така, на XP е 151.001.191 знака с 4 гига RAM, а на 8.1 с 8 GB RAM е до 1.073.741.791 знака.

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

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

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

Ще има знак W, това е седмият знак в реда, но номерирането започва от нула.

Можете също да използвате метода Chars, като посочите номера на символа в неговия параметър. Синтаксисът на този метод е както следва:

Резултатът от тази команда също ще бъде знакът W.

За да присвоите стойност на променлива, използвайте оператора =.

В резултат на това на конзолата ще се покаже низът "Здравей".

Можете също така да свързвате низове с помощта на оператора +.

В резултат на това на конзолата ще се покаже низът "Hello World!".

Можете също да използвате оператори за сравнение с низове, като напр

  • "-eq" - (=) проверява дали низовете са равни
  • "-ne" - (≠) обратно на -eq проверява за неравенство на низовете
  • "-gt" - (>) дали един низ е по-голям от другия
  • "-lt" -( "Здравей свят!" -eq "Здравей свят!"

"Здравей свят!" -eq "Здравей свят!"

Резултатът ще бъде True, тъй като низовете са идентични.

Оператори-gt, -lt, -le, -ge може по същество да помогне да се определи дали даден низ започва с подниз, например:

"Здравей свят!" -gt "Здравей"

"Здравей свят!" -gt "Здравей"

Резултатът ще бъде True. По-логично е обаче да използвате метода на самата линия StartsWith за това, той е описан по-долу.

Има и методи за сравнение -like и -match

Операторът -like използва модели за сравнение, както често се използва в низа dos, например:

"Здравей свят!" -Като "Здравей*!"

"Здравей свят!" -Като "Здравей*!"

Резултатът ще бъде: Вярно

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

Предишният пример може да изглежда така:

"Здравей свят!" -match "Hello[\D]*!"

"Здравей свят!" -match "Hello[\D]*!"

Резултатът ще бъде: Вярно

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

$ a = get-help Get-Help-detailed

Този скрипт ще доведе до следния набор от редове: @("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:MS Помощ=http://msdn.microsoft.com/ ")

Трябва да се отбележи, че всички обекти в PowerShell са обекти и низовете не са изключение.

Помислете за методите, които могат да бъдат приложени към низове:

"Здравей свят!" gm

"Здравей свят!" gm

Клонинг - копие на обект.

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

Синтаксисът му е: [String]=[String].Clone()

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

Ще има низ "Hello World!".

CompareTo - сравнениедва реда

Нарича се [int]= [1 line].CompareTo([2 line])

Резултатът от този метод е 0 - тогава низовете съвпадат. Може също да има -1 и 1.

-1 означава, че ред 1 е по-малък от ред 2.

1 означава, че ред 1 е по-голям от ред 2

Например резултатът от този израз:

ще бъде 1, а изразите

( "Здравей свят!").CompareTo("здравей свят!");

( "Здравей свят!").CompareTo("здравей свят!");

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

[низ]::Сравнение([низ 1], [низ 2], [дали да се игнорират главни и малки букви])

Нека ги сравним с репликите "Hello World!" и "здравей свят!"

[ низ]::Сравнение("Здравей свят!","здравей свят!",$True)

[ низ]::Сравнение("Здравей свят!","здравей свят!",$True)

Резултатът ще бъде 0, което означава, че двата низа са равни.

Съдържа - Намиране на подниз

Този метод ще ви помогне да видите дали дадения низ е подниз.

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

[bool] = [ред 1].Съдържа ([ред 2])

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

резултатът от този израз ще бъде стойността "Истина". Този метод обаче е чувствителен към главни и малки букви.

EndsWith – Дали низът завършва с подниз

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

Този метод ще определи дали ред 1 завършва с ред 2.

StartsWith – дали низът започва с подниз

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

Подобно на EndsWith, този метод ще определи дали ред 1 започва с ред 2.

Равно - сравняване на два низа

Този метод ви позволява да сравнявате низове:

[bool] = [ред 1].Equals([ред 2])

( "Здравей свят!"). Равно на ("Здравей свят!")

( "Здравей свят!"). Равно на ("Здравей свят!")

Резултатът от тази операция ще бъде True

Въпреки това е по-удобно да го напишете така:

"Здравей свят!" -Eq "Здравей свят!"

"Здравей свят!" -Eq "Здравей свят!"

GetHashCode - вземете хеш кода на низа

Синтаксисът за този метод е:

[int] = [ред 1].GetHashCode()

Резултатът от изпълнението на метода, на реда "Hello World!" :

IndexOf - индекс на началото на срещането на подниза.

Този метод ви позволява да получите индекса на първия символ на срещане на подниз в низ:

[int] = [ред 1].IndexOf([ред 2])

Резултатът от изпълнението на този скрипт ще бъде "6". Тъй като номерацията на редовете започва с нулев знак.

LastIndexOf - Последното срещане на подниза

За разлика от IndexOf, той не показва първата стойност на записа на подниза, а последната, синтаксисът на този метод е:

[int]=[ред 1].LastIndexOf([ред 2])

Резултатът ще бъде стойността 7.

IndexOfAny - Първото появяване на всеки знак от подниз в низ.

[int] = [ред 1].IndexOfAny([ред 2])

Този метод ще получи първото появяване на всеки знак от ред 2 в ред 1

Резултатът ще бъде 2, тъй като l също присъства в думата Свят

LastIndexOfAny - последното появяване на произволен знак от подниз в низ.

[int] = [ред 1].LastIndexOfAny([ред 2])

По подобен начин IndexOfAny търси стойността на входните знаци на подниза в низа, но извежда не първото срещане, а последното

резултатът от тази команда ще бъде 10 и това е знакът "d".

Insert - Вмъкване в низ, подниз.

[Низ]= [ред 1].Insert([Номер на знак],[ред 2])

резултатна този метод ще бъде низ, съдържащ низ 2, започващ със символа "Номер на символа"

( "Здравей свят!"). Вмъкване (11," на Warcraft")

( "Здравей свят!"). Вмъкване (11," на Warcraft")

Резултатът от изпълнението на този скрипт ще бъде низът: "Здравей, World of Warcraft!"

PadLeft - допълва низа със знаци отляво

За допълване на низ до определен брой знаци. Ако искаме символите да бъдат подплатени отляво, можем да използваме командата PadLeft, нейният синтаксис е:

[Низ] = [низ 1].PadLeft([размер на низ],[знак за попълване])

Резултатът от тази команда ще бъде низът: ". Hello World!"

PadRight - допълване на низ със знаци отдясно

По същия начин, тъй като PadLeft допълва низа до определения размер със знаци, добавяйки ги отдясно. Синтаксис:

[Низ] = [низ 1].PadRight([размер на низ],[знак за попълване])

Резултатът от тази команда ще бъде низът: Hello World.

Премахване - позволява ви да премахвате поднизове от низ

Методът Remove е претоварен и може да се използва в следните синтаксиси:

[Низ] = [низ 1].Премахване([брой знаци])

резултатът от тази команда ще бъде низ, съдържащ подниз, започващ от символ 0 на низ 1 и завършващ със знака, посочен в метода.

Резултатът ще бъде низът: "Той"

Ако използвате синтаксиса:

[Низ] = [низ 1].Премахване([начална позиция],[брой знаци])

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

Подниз - позволява ви да получите подниз от низ

Методът Substring е точно обратното на метода Remove.

Той също е претоварен и можеизползвани в два варианта.

[Низ] = [низ 1].Подниз([брой знаци])

Резултатът от тази команда ще бъде подниз, образуван от низ 1 чрез изтриване на дадения брой знаци.

Резултатът от тази команда ще бъде низът: "lo World!"

Има и друг синтаксис:

[Низ] = [низ 1].Премахване([начална позиция],[брой знаци])

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

Резултатът ще бъде низът "World"

Замяна - намиране на подниз и го заменя със свой собствен

Този метод ви позволява да замените всички срещания на подниз в низ с друг подниз.

[Низ] = [низ 1].Replace([стар подниз],[нов подниз])

Резултатът от "Сбогом свят!"

Разделяне - разделяне на низ в масив от низове.

Понякога един низ е по-лесен за обработка като масив, за това има метод Split. Тя ви позволява да разделите низ на масив от поднизове, като използвате разделителен знак или група от знаци.

[низ[] ]= [низ 1].Разделяне([разделителен знак])

( "Здравей свят!"). Разделяне (" ")

( "Здравей свят!"). Разделяне (" ")

резултатът ще бъде масив от низове "Hello", "World,!"

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

Резултатът ще бъде масив от низове: "H", "ll", "W", "rld!"

Trim, TrimLeft, TrimRight - премахване на същите символи отстрани на страницата

Понякога трябва да премахнете дублирани знаци отстрани на низ. Много често такива знаци са интервали, за това има Trim meter, той съществува в следните варианти Trim, TrimLeft, TrimRight те се различават по обхват, Trim изхвърля ненужните знаци от двете страни на низа, TrimLeft -само от ляво, TrimRight - само от дясно.

За да премахнете допълнителни интервали, можете да използвате следния синтаксис:

„Здравей свят!“.Trim()

„Здравей свят!“.Trim()

Резултатът от тази команда ще бъде низът "Hello World!"

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

[Низ]=[низ 1].Trim([знак за премахване])

[Низ]=[низ 1].TrimLeft([знак за премахване])

[Низ]=[низ 1].TrimRight([знак за премахване])

" . Здравей свят. ".Trim(".")

" . Здравей свят. ".Trim(".")

Резултатът от тази команда ще бъде низът "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 - вземете enum

Вземете enum от низ.

Синтаксисът за този метод е:

[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

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