Работа с низове в 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 регулярни изрази.