Как быстро и легко читать текстовые файлы в Powershell
Текстовые файлы есть повсюду, и вам придется их прочитать, независимо от вашей роли или должностных обязанностей. Фактически, если вы ИТ-специалист, вам придется чаще создавать, читать или работать с текстовыми файлами, поскольку они бывают разных форматов. Эта гибкость также сделала текстовые файлы наиболее удобным способом идентификации сценариев, хранения сведений о конфигурации и т. Д.
PowerShell понимает важность текстовых файлов и упрощает доступ к ним и их чтение. В этой статье TipsMake может показать вам, как читать текстовые файлы в PowerShell.
Способы чтения текстовых файлов в Powershell
- Прочитать полное содержание
- Прочтите отрывок из содержания
- Читать построчно
- Используйте Get-Content
- Используйте класс StreamReader
- Найдите конкретный текст
- Дополнительные возможности с Get-Content
- Подсчитайте количество строк в файле
- Выберите конкретные номера строк в начале и в конце
- Файл постоянно обновляется
Прочитать полное содержание
Прочитать полное содержание
Если вы хотите прочитать все содержимое текстового файла, самый простой способ – использовать встроенную функцию Get-Content. Вот код, который позволяет это сделать:
Get-Content C: logslog01012020.txt
Содержимое этого файла будет отображаться на экране PowerShell ISE или командной строки.
Когда вы выполняете эту команду, содержимое этого файла будет отображаться на экране PowerShell ISE или командной строки, в зависимости от того, где вы выполняете.
Вы также можете переместить все содержимое в переменную и использовать эту переменную для дальнейшей обработки, если вы хотите, чтобы ваш код делал это.
$ file_data = Get-Content C: logslog01012020.txt
Теперь вы можете использовать эту переменную $ file_data для анализа или дальнейшей обработки.
Прочтите отрывок из содержания
Вы можете выбрать строки, которые хотите прочитать
Во многих случаях вам может потребоваться просто прочитать определенную часть файла, чтобы получить нужную информацию. Как и в случае с SQL-запросами, вы можете выбрать строки, которые хотите прочитать, и код для этого:
$ file_data = Get-Content C: logslog01012020.txt $ file_data | Select-Object -First 10
Как показывает код, первые 10 строк будут храниться в переменных, а не весь контент. Вы можете отобразить содержимое этой переменной или использовать ее для дальнейшей обработки.
Точно так же мы можем прочитать несколько последних строк:
$ file_data = Get-Content C: logslog01012020.txt $ file_data | Выбрать объект -Последние 10
Читать построчно
Если вы хотите прочитать файл, чтобы понять его содержимое, вы должны делать это построчно, и хорошая новость в том, что это возможно с помощью PowerShell. На самом деле, есть 2 способа сделать это.
Используйте Get-Content
Функция Get-Content считывает каждую строку текста и сохраняет их как массив, где каждая строка является элементом массива. В приведенном выше примере статья использовала одну переменную для чтения всего содержимого.
$ file_data = Get-Content C: logslog01012020.txt
Если вывод этой переменной, вы можете увидеть, что это массив. Это означает, что вы можете выбирать определенные строки, используя индекс массива. Например, если вы хотите прочитать первую строку, просто введите:
$ file_data [0]
И эта команда покажет вам первую строку.
$ file_data[1]
Эта команда отобразит вторую строку (как и следующую строку).
Используйте класс StreamReader
Второй вариант – использовать класс .NET под названием StreamReader.
$ stream_reader = новый объект System.IO.StreamReader {C: logslog01012020.txt}
Теперь у вас есть содержимое файла журнала в этой переменной $ stream_reader, и, поскольку он принадлежит классу StreamReader, вы можете использовать множество встроенных методов для получения нужного текста.
По мере ввода:
$ stream_reader.ReadToEnd ()
Команда выведет весь контент на ваш экран, аналогично Get-Content.
Чтобы прочитать текущую строку, вы можете использовать следующий метод:
$ stream_reader.ReadLine ()
Но сама по себе эта команда может оказаться бесполезной, поэтому вам придется запускать ее в цикле и читать содержимое текстового файла построчно.
$ stream_reader = New-Object System.IO.StreamReader {C: logslog01012020.txt} $ line_number = 1 while (($ current_line = $ stream_reader.ReadLine ()) -ne $ null) {Write-Host “$ line_number $ current_line” $ line_number ++}
Приведенный выше код начинается с первой строки и выводит каждую строку с количеством строк, прикрепленных для удобства чтения. Вы даже можете использовать любой из доступных строковых методов в переменной $ current_line для дальнейшего анализа.
Этот метод идеально подходит для чтения больших файлов, поскольку при сохранении содержимого в переменной он может занимать слишком много памяти и влиять на производительность. Так что это более эффективный способ получить нужный контент.
Найдите конкретный текст
Во многих случаях требуется найти определенный текст в файле, и для фильтрации содержимого лучше всего использовать командлет Where-Object.
$ file_data = Get-Content C: logslog01012020.txt | Where-Object {$ _ -like ‘* error *’}
Приведенный выше код будет выводить строки со словом «ошибка» в нем. Здесь $ _ – это переменная, представляющая текущую строку содержимого, полученного из Get-Content.
Помимо Where-Object, вы также можете использовать операторы match и regex, чтобы найти нужный текст.
Дополнительные возможности с Get-Content
Get-Content – очень гибкий командлет с множеством опций. Вот несколько вещей, которые вы можете с ним сделать.
Подсчитайте количество строк в файле
Возможно, вы захотите узнать количество строк, доступных в файле. Код для этого:
$ file_data = Get-Content C: logslog01012020.txt | Мера-объект
Выберите конкретные номера строк в начале и в конце
Ранее вы узнали, как выбрать первые несколько строк или последние несколько строк с помощью командлета Select-Object. Вы также можете получить аналогичные результаты, используя некоторые методы, интегрированные с Get-Content.
Чтобы получить первые несколько строк, используйте следующий метод:
$ file_data = Get-Content C: logslog01012020.txt -TotalCount 3
Эта команда вернет первые 3 строки из файла.
$ file_data = Get-Content C: logslog01012020.txt -Tail 3
Эта команда вернет последние 3 строки из файла.
Файл постоянно обновляется
Предположим, ваш файл журнала постоянно обновляется, и вы хотите посмотреть в конец этого файла журнала, чтобы прочитать последние обновленные значения. Вы можете добавить параметр ожидания, например:
$ file_data = Get-Content C: logslog01012020.txt -Tail 3 -Wait
Эта команда будет постоянно отслеживать файл журнала, чтобы найти новые добавленные и отображаемые для вас строки.