Аналоги cat, tail, head и wc в PowerShell


Как в PowerShell передать содержимое файла в командлет

В заметке «Как в PowerShell сохранить вывод в файл (аналоги > и >>)» мы рассмотрели, как сохранить вывод командлета в файл. В этой заметке мы рассмотрим, как получить содержимое файла и отправить его командлету для обработки или для вывода на экран.

В Bash на Linux когда нужно передать данные из файла команды или работают со стандартным вводом или путь до файла указывается с помощью опции. В PowerShell командлеты также могут принимать данные из стандартного ввода, например:

Get-Content -Path C:\Domain01.txt | Restart-Computer

Как вы уже могли понять из приведённой выше команды, аналогом cat в PowerShell является командлет Get-Content. Если нужно в опцию передать содержимое файла, то используется конструкция пример которой показан в следующей команде:

Add-Computer -ComputerName (Get-Content Servers.txt) -DomainName Domain02 -Credential Domain02\Admin02 -Options Win9xUpgrade -Restart

Для последующих примеров создадим текстовый файл, в который запишем перечень папок и файлов текущей директории:

Get-ChildItem > current_dir.txt

Аналог cat, tail и head в PowerShell

В Linux имеется несколько команд для чтения файла:

  • cat — считывает весь файл
  • tail — считывает указанное количество строк (по умолчанию 10) от конца файла
  • head — считывает указанное количество строк (по умолчанию 10) от начала файла

Для всего этого в PowerShell используется командлет Get-Content.

Пример считывания содержимого файла current_dir.txt (при этом содержимое будет передано по конвейеру или если других командлетов нет, то будет выведено в стандартный вывод, то есть на экран):

Get-Content current_dir.txt

Примечание: в Windows версии PowerShell в качестве псевдонима Get-Content вы можете использовать команду cat. В Linux версии PowerShell при попытке использовать cat в консоли pwsh будет задействована утилита Linux.

Командлет Get-Content получает содержимое элемента не только файлов, но также может получить содержимое функции. Для файлов содержимое считывается по одной строке за раз и возвращает набор объектов, каждый из которых представляет собой строку содержимого.


Как прочитать файл и сохранить его в переменной

Как содержимое файла вместо вывода на консоль сохранить в файл? То есть как сделать аналог следующей команды Bash:

a="`cat FILE`"
echo "$a"

В следующей команде будет прочитан файл current_dir.txt и его содержимое будет сохранено в переменную $dir:

$dir = Get-Content current_dir.txt

Как прочитать и объединить содержимое нескольких файлов

Рассмотрим, как сделать аналог следующей команды:

cat file1.txt file2.txt

Чтобы одновременно прочитать и объединить вывод нескольких файлов, передайте имена файлов в качестве массива:


Get-Content -Path @('file1.txt', 'file2.txt')

Поскольку массив можно создать просто перечислив его значения через запятую, без использования символа «@», и поскольку опцию -Path можно пропустить, то вы можете чуть сократить запись:

Get-Content 'file1.txt', 'file2.txt'

Коротко говоря, чтобы прочитать одновременно несколько файлов в Get-Content, перечислите имена этих файлов через запятую.

Опция -Path и использование подстановочных знаков с Get-Content

Для указания файла можно использовать опцию -Path, но её можно и опускать:

Get-Content -Path 'C:\Server\bin\PHP\php.ini'

Можно использовать подстановочные знаки:

Get-Content -Path 'C:\Server\bin\PHP\php.*'

Смотрите также: Подстановочные символы в PowerShell

Путь должен указать до элементов, но не до контейнеров. Например, можно указать путь до одного или более файлов, но не до директории.

То есть рассмотренные в этом разделе команды являются аналогами

cat file*
cat C:\Server\bin\PHP\php.*
cat C:\Server\bin\PHP\*.conf

Как прочитать определённое количество строк от начала файла

Рассмотрим как сделать аналог следующей команды:

head -n 10 current_dir.txt

С помощью опции -TotalCount (её псевдонимы -First и -Head) вы моете указать количество строк, которое должно быть прочитано от начала файла.

Следующая команда прочитает 10 первых строк файла current_dir.txt:

Get-Content current_dir.txt -TotalCount 10

Как прочитать определённое количество строк от конца файла

Рассмотрим как сделать аналог следующей команды:

tail -n 10 current_dir.txt

С помощью опции -Tail вы можете прочитать последние строки файла, например:

Get-Content current_dir.txt -Tail 10

Как узнать, сколько строк было прочитано

Рассмотрим, как сделать аналог следующей команды:

cat current_dir.txt | wc -l

Командлет Get-Content возвращает массив строк, поэтому вы можете использовать методы для массивов, например, следующие команды покажут количество строк в файле current_dir.txt:

(Get-Content current_dir.txt).Count
(Get-Content current_dir.txt).Length

Для подсчёта количества строк вы также можете использовать командлет Measure-Object:

Get-Content current_dir.txt | Measure-Object -Line | select Lines

Обратите внимание, что эти команды вернули разное количество строк. Первая команда вернула общее количество строк вместе с пустыми, а вторая посчитала только непустые строки.


Рекомендуется Вам:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *