Powershell перенос строки в файле
Описание процесса изменения команд в командной строке PowerShell.
Вертикальная табуляция ("v")
Символ вертикальной табуляции ( `v ) перемещается на следующую позицию вертикальной табуляции и записывает остальные выходные данные в этот момент. Отрисовка вертикальной вкладки зависит от устройства и терминала.
В следующих примерах показаны отображаемые выходные данные вертикальной вкладки в некоторых распространенных средах.
ведущее приложение консоли Windows интерпретирует ( `v ) как специальный символ без добавления дополнительного интервала.
Терминал Windows отображает символ вертикальной табуляции в виде возврата каретки и перевода строки. Остальные выходные данные выводятся в начале следующей строки.
На принтерах или в консолях на базе UNIX символ вертикальной табуляции перемещается на следующую строку и записывает оставшиеся выходные данные в этот момент.
Методы
Теперь возьмем строку и начнем над ней издеваться приступим к методам.
Метод Insert служит для вставки подстроки в исходную строку, начиная с указанного символа. Для примера вставим ″ .N″ в конец строки (после 17 символа):
Метод Remove удаляет символы из строки начиная с указанного символа, например:
Метод Replace находит в исходной строке подстроку и заменяет ее на другую, например:
Метод Split разбивает строку на массив строк с помощью разделяющего символа или группы символов. Например так мы разобьем строку, используя в качестве разделителя пробел:
А так укажем в качестве разделителя букву е:
Если необходимо указать несколько разделителей, то достаточно просто перечислить их через запятую:
Метод Substring позволяет получить подстроку, сформированную из исходной строки. Есть два варианта использования этого метода. К примеру результатом выполнения следующей команды будет строка, полученная путем удаления из исходной строки заданного количества символов:
А таким способом мы получим подстроку, сформированную из исходной строки, начинающуюся с указанной позиции (8) и содержащую указанное количество символов (9):
Метод Clone создает точную копию исходного объекта, например:
Метод CompareTo производит сравнение двух строк и выдает 0, если строки совпадают:
В случае несовпадения метод может выдать -1 (если первая строка больше второй) или 1 (если первая строка меньше второй). Также при использовании этого метода стоит учитывать, что регистр символов влияет на результат сравнения. Если необходимо сравнить строки без учета регистра, то можно воспользоваться статическим методом Compare, о котором чуть позже.
Метод Equals также сравнивает две строки и в зависимости от результата возвращает True или False:
Кстати, такой же результат получается при использовании оператора сравнения -eq:
$string -eq $string2
Метод Contains проверяет наличие в строке указанной подстроки, и в зависимости от результата возвращает True или False. Например:
Метод StartsWith проверяет, начинается ли строка с указанной подстроки:
а метод EndsWith проверяет, заканчивается ли исходная строка подстрокой:
Обратите внимание, что эти методы также чувствительны к регистру символов.
Говоря о зависимости от регистра символов, стоит упомянуть еще два метода. Метод ToUpper переводит исходную строку в верхний регистр:
а метод ToLower соответственно в нижний:
С их помощью можно избавиться от регистрозависимости, например при поиске или сравнении:
Метод IndexOf находит индекс начала вхождения подстроки в исходной строке. Например, создадим строковую переменную:
$string = ″substring one, substring two, substring three″
Теперь выведем индекс начала вхождения подстроки (substring):
Как видите, метод выдал 0 — это номер первого символа ( s ubstring one, substring two, substring three) в исходной строке.
Метод LastIndexOf показывает индекс последнего вхождения подстроки, т.е. номер начала последнего вхождения указанной подстроки в исходной строке. Например, следующая команда выдаст 30 — номер последнего символа (substring one, substring two, s ubstring three) в строке:
Метод IndexOfAny возвращает первое, а метод LastIndexOfAny — последнее вхождение любого символа из подстроки в исходной строке. Например:
Эта команда, как и в случае с IndexOf выдаст 0 — номер первого символа (s) в строке. А так мы получим 42 — номер последнего символа подстроки (substring one, substring two, substrin g three) в строке:
Методы PadLeft и PadRight позволяют дополнить исходный текст до нужного количества символов слева или справа. Для примера создадим новую переменную $string и посмотрим ее длину:
$string = ″my name is Vasya Pupkin″
$string.Length
Как видите, строка содержит 23 символа. Дополним ее точками до 26 символов слева:
а получившуюся строку дополним знаками вопроса до 30 символов справа:
В принципе, процесс можно не разбивать на части, а дополнить сразу с двух сторон:
Методы TrimStart, TrimEnd и Trim обрезают повторяющиеся символы по бокам строки. TrimStart обрезает символы в начале, TrimEnd в конце строки, а Trim — с обоих сторон сразу. В качестве примера возьмем получившуюся в прошлый раз строку и обрежем лишние точки в начале:
и лишние знаки вопроса в конце:
Немного о типах данных. Текущий тип данных можно посмотреть с помощью метода GetType, например:
$a = ″string ″
$a.GetType()
В поле Name указан тип данных String (строка).
Строковые данные можно преобразовать в другой тип данных, для чего у строки имеется ряд методов. Для примера возьмем метод ToCharArray и с его помощью преобразуем строку в массив символов:
Если теперь проверить тип данных, то вместо String мы увидим тип Char[].
Преобразовать тип данных можно и с помощью статического метода Convert. Для примера создадим переменную, содержащую строку, а затем преобразуем ее в число (Int32);
$string = ″123″
$int = [convert]::ToInt32($string)
Out-File
Командлет Out-File перенаправляет выходные данные в указанный файл, например:
Get-Process powershell | Out-File proc.txt
По умолчанию данные в файле перезаписываются. Запретить перезапись существующего файла можно, указав ключ NoClobber, а если необходимо дописывать данные в существующий файл, то можно использовать ключ Append, который добавляет данные в конец файла:
Get-Process powershell | Out-File proc.txt -Append
Для вывода в файл можно использовать сокращенный синтаксис. Например для записи:
Get-Process powershell >proc.txt
или для добавления в конец файла:
Get-Process powershell >>proc.txt
Маркер отмены синтаксического анализа (--%)
Токен "Отмена синтаксического анализа" ( --% ) предотвращает интерпретацию строк в PowerShell как командами и выражениями PowerShell. Это позволяет передавать эти строки другим программам для интерпретации.
Поместите токен "точка-анализ" после имени программы и перед аргументами программы, которые могут вызвать ошибки.
В этом примере Icacls команда использует токен-синтаксический анализ.
PowerShell отправляет следующую строку в Icacls .
Вот еще один пример. Функция шоваргс выводит переданные ей значения. В этом примере мы передаем переменную с именем $HOME в функцию дважды.
В выходных данных можно увидеть, что для первого параметра Переменная $HOME интерпретируется PowerShell, чтобы значение переменной передавалось функции. Второе использование $HOME поступает после маркера-синтаксического анализа, поэтому строка "$Home" передается в функцию без интерпретации.
Дополнительные сведения о токене завершения синтаксического анализа см. в разделе about_Parsing.
Практически в каждом языке программирования есть еscape-символы — специальные символы, с помощью которых можно изменять свойства следующих за ними символов. Наличие escape-символа говорит о том, что следующий за ним символ (или символы) следует обрабатывать особым образом. Комбинация escape-символа и следующих за ним символов называется escape-последовательностью.
В PowerShell в качестве escape-символа используется знак обратного апострофа (`). С его помощью можно производить следующие операции.
Возврат каретки (' r)
Символ возврата каретки ( `r ) перемещает выходной курсор в начало текущей строки и продолжается запись. Все символы в текущей строке перезаписываются.
В этом примере текст перед возвратом каретки перезаписывается.
Обратите внимание, что текст перед `r символом не удаляется, он перезаписывается.
Заполнение нажатием клавиши TAB
Чтобы завершить имя командлета, параметр или путь, нажмите клавишу Tab . Чтобы прокрутить список значений, снова нажмите клавишу Tab .
Описание специальных последовательностей символов, управляющих тем, как PowerShell интерпретирует следующие символы в последовательности.
Out-GridView
Командлет Out-GridView выводит данные в виде графической таблицы, в которой их можно отфильтровать и отсортировать по нужному признаку. Для наглядности можно указать ключ Title, который будет отображаться в заголовке:
Get-Process | Out-GridView -Title processes
Начиная стретьей версии PowerShell Out-GridView поддерживает ключ PassThru, позволяющий передать полученные данные дальше по конвейеру. Например, можно вывести список процессов, в графической оснастке отобрать нужные и передать их командлету Stop-Process, который остановит выбранные процессы:
Get-Process | Out-GridView -PassThru | Stop-Process
Подробное описание
Консоль PowerShell имеет несколько полезных сочетаний клавиш, с помощью которых можно изменять команды в командной строке PowerShell.
Добавление линии
Чтобы добавить линию, нажмите клавишу SHIFT + Ввод .
Можно добавить несколько строк. Каждая дополнительная строка начинается с >> строки продолжения. Нажмите клавишу Ввод , чтобы выполнить команду.
Символ Юникода (' u )
Escape-последовательность Юникода ( `u ) позволяет указать любой символ Юникода в шестнадцатеричном представлении его кодовой точки. Сюда входят символы Юникода, расположенные над базовой многоязычной плоскостью (> 0xFFFF ), которая содержит символы эмодзи, такие как бегунок up ( `u ). Escape-последовательности Юникода требуется по крайней мере одна шестнадцатеричная цифра и поддерживает до шести шестнадцатеричных цифр. Максимальное шестнадцатеричное значение для последовательности — 10FFFF .
В этом примере выводится символ " стрелка вверх " (↕).
Режим вставки и замены
Чтобы изменить режим перезаписи, нажмите клавишу INSERT . Чтобы вернуться в режим вставки, еще раз нажмите клавишу INSERT .
Удалить символы из строки
Чтобы удалить все символы с позиции курсора до конца строки, нажмите клавишу CTRL + End .
Чтобы удалить все символы из позиции курсора в начало строки, нажмите CTRL + Home .
Если были добавлены строки, то символы удаляются из текущей строки и добавленных строк.
Предупреждение (' а)
Символ предупреждения ( `a ) отправляет звуковой сигнал на динамик компьютера. Этот символ можно использовать для предупреждения пользователя о предопределенном действии. В следующем примере два звуковых сигнала отправляются на динамик локального компьютера.
Переместить влево и вправо
Чтобы переместить курсор на один символ влево, нажмите клавишу стрелка влево .
Чтобы переместить курсор на одно слово влево, нажмите клавиши CTRL + стрелка влево .
Чтобы переместить курсор на один символ вправо, нажмите стрелку вправо .
Чтобы переместить курсор на одно слово вправо, нажмите клавишу CTRL + стрелка вправо .
NULL (' 0)
Символ null ( `0 ) отображается как пустое пространство в выходных данных PowerShell. Эта функция позволяет использовать PowerShell для чтения и обработки текстовых файлов, использующих нуль символов, таких как завершение строк или индикаторы завершения записи. Специальный символ NULL не эквивалентен $null переменной, в которой хранится значение null .
Перенос строки
Escape-символ в конце строки указывает на то, что команда будет продолжена на следующей строке. Таким образом удобно разбивать на части длинные команды. Например:
Backspace (' б)
Символ Backspace ( `b ) перемещает курсор назад на один символ, но не удаляет символы.
Этот пример записывает слово BACKUP , а затем дважды перемещает курсор назад. Затем в новой позиции записывается пробел, за которым следует слово out.
Свойства
Начнем со свойств, которых у строки оказалось немного — всего два. Свойство Length содержит длину строки, или количество символов:
А свойство Chars позволяет обращаться к любому символу в строке по его номеру, например:
Кстати, к символам в строке можно обращаться без использования Chars, а как к элементам массива, по индексу:
А если указать отрицательное число, то массив будет перебираться с конца:
Также кроме одного символа можно указать диапазон, например:
Escape (' e ')
Escape-символ ( `e ) чаще всего используется для указания виртуальной последовательности (escape-последовательность ANSI), которая изменяет цвет текста и других текстовых атрибутов, таких как выделение полужирным шрифтом и подчеркивание. Эти последовательности также можно использовать для позиционирования курсора и прокрутки. Узел PowerShell должен поддерживать виртуальные последовательности терминалов. Можно проверить логическое значение $Host.UI.SupportsVirtualTerminal , чтобы определить, поддерживаются ли эти последовательности ANSI.
Дополнительные сведения о escape-последовательностях ANSI см. в разделе ANSI_escape_code.
В следующем примере выводится текст с зеленым цветом переднего плана.
Out-String
Командлет Out-String преобразует входные данные в массив строк. По сути Out-String преобразует объекты PowerShell в строки, с которыми дальше можно работать как с обычным текстом (форматировать, производить поиск и т.п.).
Для примера выведем процесс, сохраним его в переменную $a и посмотрим тип данных:
$a = Get-Process powershell
$a.GetType()
Затем скормим содержимое Out-String а вывод сохраним в переменную $b:
$b = $a | Out-String
$b.Get-Type()
Как видно из примера, на входе Out-String тип данных Process, а на выходе String.
Out-String принципиально отличается от остальных out-командлетов. Поскольку обычные out-командлеты работают с конечным результатом предыдущих команд, то сами они не производят никаких выходных данных. Именно поэтому out-командлет обычно ставится последним в командной строке, ведь после него в конвейере не остается ничего, с чем могут работать другие командлеты.
В отличие от них Out-String принимает объекты, преобразует их в массив строк и передает дальше по конвейеру. По умолчанию данные накапливаются и возвращаются одной строкой, но с помощью ключа Stream можно указать вывод по отдельной строке для каждого объекта.
Для примера выведем список системных служб со всеми свойствами и отформатируем его в виде таблицы:
Get-Service | Format-Table -Property * -AutoSize
Поскольку ширина консоли граничена 80 символами, то большинство данных будет обрезано, что не очень здорово.
Чтобы не обрезать вывод, направим его в Out-String и увеличим ширину:
Get-Service | Format-Table -Property * -AutoSize | Out-String -Width 1024
Теперь все данные попали на экран, но все равно выглядит не очень.
Исправим положение, передав вывод Out-String командлету Out-File:
Get-Service | Format-Table -Property * -AutoSize | Out-String -Width 1024 | Out-File service.txt
На выходе получаем файл с таблицей нужной ширины, а для просмотра есть полоса прокрутки. Таким образом можно создавать и просматривать таблицы практически любой ширины.
Удалить символы
Чтобы удалить символ, расположенный за положением курсора, нажмите клавишу Backspace .
Чтобы удалить символ в позиции курсора, нажмите клавишу Delete .
Экранирование переменной
Escape-символ перед знаком $ запрещает подставить вместо переменной ее значение. Например так мы получим значение переменной $a:
$a = 200
″The value is $a″
$a = 200
″The value is `$a″
Примечание. Обратите внимание, что escape-последовательности обязательно должны быть заключены в кавычки.
Еще пример. Предположим, что нам необходимо использовать знак $ (dollar) по его прямому назначению, например вывести фразу:
Однако после знака $ мы получим пустое место. А вот если перед знаком $ поставить escape-символ, то все получится как надо:
Перейти к началу или концу строки
Чтобы перейти к началу строки, нажмите клавишу Home .
Чтобы перейти к концу строки, нажмите клавишу End .
Если строки были добавлены, дважды нажмите клавишу Home или End , чтобы перейти к началу или концу строк.
Подробное описание
PowerShell поддерживает набор специальных последовательностей символов, которые используются для представления символов, не входящих в стандартную кодировку. Последовательности обычно называют escape-последовательностями.
Escape-последовательности начинаются с символа обратной косой черты, называемого грависом (ASCII 96), и учитывают регистр. Символ обратной кавычки также может называться Escape- символом.
Escape-последовательности обрабатываются только в строках, содержащихся в двойных кавычках ( " ).
PowerShell распознает следующие escape-последовательности:
Последовательность | Описание |
---|---|
`0 | NULL |
`a | Предупреждение |
`b | Backspace |
`e | ESC |
`f | Перевод страницы |
`n | Новая строка |
`r | Возврат каретки |
`t | Горизонтальная табуляция |
`u | Escape-последовательность Юникода |
`v | Вертикальная табуляция |
Кроме того, PowerShell имеет специальный маркер, помечающий, где следует останавливаться при разборе. Все символы, которые следуют за этим маркером, используются в качестве литеральных значений, которые не интерпретируемы.
Специальный маркер синтаксического анализа:
Последовательность | Описание |
---|---|
--% | Завершите синтаксический анализ всех следующих элементов |
Новая строка (' n)
Символ новой строки ( `n ) вставляет разрыв строки сразу после символа.
В этом примере показано, как использовать символ новой строки для создания разрывов строк в Write-Host команде.
Out-Null
Командлет Out-Null используется в том случае, если выходные данные отображать не нужно. Он отправляет полученные данные в устройство NULL, т.е. удаляет их. Для примера возьмем такую команду:
$process = Get-WmiObject win32_process -Filter ″Name = ′Notepad.exe′″
$process.Terminate()
Помимо основного действия (остановка процесса) она выводит много лишней информации. Чтобы избавится от нее, отправим вывод в Out-Null, например так:
Веб-канал формы (' ' f ' ')
Символ перевода формы ( `f ) представляет собой инструкцию PRINT, которая извлекает текущую страницу и продолжит печать на следующей странице. Символ перевода формы влияет только на печатные документы. Он не влияет на вывод на экран.
Статические методы
Кроме обычных к строке можно применять статические методы. Вывести их список можно все той же командой Get-Member с ключом -Static.
Методов много, поэтому коротко пробежимся по некоторым из них.
Метод Concat используется для объединения нескольких строк. В качестве примера создадим три стоковых переменных и объединим их:
$a = ″one″
$b = ″two″
$c = ″three″
[string]::Concat($a,$b,$c)
Метод Join также объединяет несколько строк, но с использованием заданного разделителя. Например, объединим строки используя в качестве разделителя двоеточие:
Метод Copy создает точную копию исходной строки:
Метод Compare производит сравнение двух строк и выдает 0 при их совпадении или 1\-1 при несовпадении, аналогично методу CompareTo:
Метод Equals также производит сравнение и выдает результат в виде True\False:
Метод Compare отличается одним моментом — он позволяет сравнивать строки без учета регистра символов. Для этого в нем используется переключатель $true (без учета регистра) или $false (с учетом регистра). Для примера создадим две переменных, отличающихся только регистром символов:
$a = ″string″
$b = ″String″
А теперь сравним их. Эта команда покажет, что строки идентичны:
А эта — что они различаются:
И еще пара интересных методов для проверки строк. Метод IsNullOrEmpty проверяет наличие строки, а также не является ли она пустой строкой:
Метод IsNullOrWhiteSpace тоже проверяет наличие строки, а также то, что строка содержит только white-space символы (пробел, табуляция, символ новой строки и т.п.):
Out-Host
Командлет Out-Host служит для вывода данных на экран. Например:
Get-Process powershell | Out-Host
Впрочем, добавлять Out-Host в конец команды совсем необязательно. В конце конвейера по умолчанию находится командлет Out-Default, который и перенаправляет все в Out-Host. Т.е. предыдущая команда эквивалентна команде:
Get-Process powershell | Out-Default
которая в свою очередь эквивалентна команде:
На самом деле механизм вывода еще запутаннее. Как вы помните, результатом работы PowerShell являются объекты. Out-командлеты не умеют работать с любыми объектами, а только со специальным типом объектов форматирования, поэтому при получении объекта вызывают один из командлетов форматирования (Format-*). Format-командлет предоставляет Out-командлету объекты форматирования, описывающие порядок построения выходных данных, а Out-командлет отправляет их в нужное устройство. Т.е. при выполнении команды:
в действительности отрабатывает команда:
Get-Process powershell | Format-Table | Out-Host
Хотя добавлять Out-Host в конец команды необязательно, но в некоторых случаях удобно. К примеру он имеет ключ Paging, с помощью которого можно организовать постраничный вывод:
Get-Process | Out-Host -Paging
Горизонтальная табуляция ('t)
Символ горизонтальной табуляции ( `t ) перемещается на следующую позицию табуляции и продолжит запись в этот момент. По умолчанию в консоли PowerShell имеется позиция табуляции в каждой восьмой области.
В этом примере вставляются две вкладки между каждым столбцом.
Out-Printer
Командлет Out-Printer перенаправляет вывод на принтер. Например:
Get-Service | Format-Table -Property * -AutoSize | Out-File service.txt -Width 1024
Get-Content service.txt | Out-Printer
Вывод отправляется на принтер, заданный в системе по умолчанию. Для указания альтернативного принтера можно использовать ключ Name.
Результатом работы команды в PowerShell всегда является не текст, а объект. Это касается и работы с текстом. Каждая строка является отдельным объектом со своими свойствами и методами, которыми можно пользоваться для обработки текста.
Для примера создадим переменную, в которую поместим строку, а затем выведем ее свойства и методы:
$string = ″My name is Kirill″
$string | Get-Member
Форматирование
Некоторые escape-последовательности при использовании с кавычками создают управляющие инструкции, с помощью которых можно управлять выводом. PowerShell понимает следующие последовательности:
`0 — пустой символ (Null);
`a — звуковой сигнал передается на системный динамик;
`b — возврат (backspace);
`f — печать с новой страницы;
`n — символ новой строки;
`r — возврат в начало строки;
`t — горизонтальная табуляция;
`v — вертикальная табуляция.
Их удобно использовать в том случае, если требуется определенным образом отформатировать вывод команды. Для примера оформим выходные данные в виде таблицы:
″`0 one `t two `t three n `0 `n four `t five `t six `n seven `t eight `t nine `n `0 ″
Справку по escape-последовательностям PowerShell можно вызвать командой Get-Help about_esc .
Обычно в процессе работы PowerShell генерируются некоторые выходные данные. Для вывода этих данных существуют специальные Out-командлеты (командлеты, название которых начинается с Out-). Когда выполняемая команда PowerShell возвращает данные, они передаются по конвейеру на вход Out-командлета, который обрабатывает их и отправляет в устройство вывода (на экран, в файл, на принтер и т.п.).
Для просмотра этих командлетов выполним команду:
Get-Command -Verb Out
Экранирование кавычек
В одной из предыдущих статей я описывал особенности использования кавычек в PowerShell. Напомню, что в одной строке нельзя использовать две пары одинаковых кавычек. Например следующая команды вызовет ошибку:
В этой ситуации необходимо либо использовать разные типы кавычек, либо воспользоваться escape-символом. Если поместить его перед двойными кавычками, то PowerShell интерпретирует их как обычный символ, а не как разделитель строк:
Читайте также: