На окнах, с помощью Powershell, каковы эквивалентные команды для Линукса head
, tail
, more
, less
и sed
?
windows
powershell
Юэ Чжан
источник
источник
notepad
качестве основы, я бы посоветовал взглянуть на альтернативные текстовые редакторы, есть множество (как бесплатных, так и платных) альтернатив. Все они лучше блокнота (хотя это не такая уж проблема).Ответы:
Get-Content
(псевдоним:)gc
- ваш обычный вариант чтения текстового файла. Затем вы можете фильтровать дальше:Это работает достаточно хорошо для небольших файлов, большие (более нескольких МБ), вероятно, немного медленны.
В PowerShell Community Extensions включают некоторые командлеты для специализированного файла материала (например , Get-FileTail).
источник
-last 2
с CSV объемом 1 ГБ. Горячий напиток: ☕Get-Content -Tail 2
вместо него. Это определенно быстрее.gc log.txt | %{ $_ -replace '\d+', '($0)' } # sed
это не совсем инструмент sed, поскольку он не возвращает контент. Ему нужен Set-Content.-Last
работает медленно по той же причине,awk
что и для той же задачи: он должен сначала полностью потребить поток. Вот почемуGet-Content -Tail
существует. И нет,head
потому что он не вписывается в соглашения об именах, и его цель уже выполненаSelect-Item
.-head
. См. Мой ответ stackoverflow.com/a/41626586/1081043Вот встроенные способы сделать
head
иtail
. Не используйте каналы, потому что если у вас большой файл, он будет работать очень медленно. Эти встроенные параметры можно использовать очень быстро даже для больших файлов.источник
| select -last
использует трубы. Пользуюсь-tail
без трубы. Но если вы когда-нибудь найдете два противоречивых ответа, вы, вероятно, сможете доверять человеку с гораздо более высокой репутацией. Кроме того, вы можете просто попробовать два метода для большого файла. Это будет очень заметно на большом файле.more.exe
существует в Windows, портыless
легко найти (и PowerShell Community Extensions , PSCX, включает один).PowerShell на самом деле не предоставляет альтернативы отдельным программам для обоих, но для структурированных данных
Out-Grid
может быть полезен.Head
иTail
как можно эмулировать сSelect-Object
помощью-First
и-Last
параметров соответственно.Sed
все функции доступны, но структурированы по-разному. Параметры фильтрации доступны вWhere-Object
(или черезForeach-Object
и некоторое состояние для диапазонов). Другие операции преобразования можно выполнять с помощьюSelect-Object
иForeach-Object
.Однако, поскольку PowerShell передает (.NET) объекты - со всей их типизированной структурой, например. даты остаются
DateTime
экземплярами, а не просто строками, которые каждая команда должна анализировать сама, большая частьsed
таких программ и другие подобные программы являются избыточными.источник
«-TotalCount» в этом случае отвечает точно так же, как «-head». Вы должны использовать -TotalCount или -head для запуска такой команды. Но -TotalCount вводит в заблуждение - он ДЕЙСТВИТЕЛЬНО не работает, давая вам ЛЮБОЙ подсчет ...
Вышеупомянутый сценарий, протестированный в PS 5.1, - это тот же ответ, что и ниже ...
Так что просто используйте уже "-head 25"!
источник
Если вам нужно запросить большие (или маленькие) файлы журналов в Windows, лучший инструмент, который я нашел, - это бесплатный Log Parser 2.2 от Microsoft . Вы можете вызвать его из PowerShell, если хотите, и он сделает всю тяжелую работу за вас, причем очень быстро.
источник
У меня есть несколько лучших решений:
источник
Вы не получаете всех ошибок с кодом pushpop. Кстати, ваш код работает только с опцией «sed». Все остальное игнорирует все, кроме gc и path.
источник