Аналоги 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
Обратите внимание, что эти команды вернули разное количество строк. Первая команда вернула общее количество строк вместе с пустыми, а вторая посчитала только непустые строки.
Связанные статьи:
- Как в PowerShell прочитать содержимое файла. Как сохранить содержимое файла в переменную (100%)
- Как мониторить появление новых строк в файле в PowerShell (66.4%)
- Ошибки «Оператор "<" зарезервирован для использования в будущем» и «The '<' operator is reserved for future use.» (РЕШЕНО) (57%)
- Как очистить окно терминала в PowerShell. Аналог clear (55.6%)
- Как в PowerShell сохранить вывод в файл (аналоги > и >>) (50%)
- Командлеты Set-Content и Add-Content для обработки строк (RANDOM - 50%)