No Windows, usando o PowerShell, quais são os comandos equivalentes para linux do head
, tail
, more
, less
e sed
?
windows
powershell
Yue Zhang
fonte
fonte
notepad
como base, sugiro que você procure editores de texto alternativos, pois há muitas alternativas (gratuitas e pagas). Todos são superiores ao bloco de notas (embora isso não seja um grande desafio).Respostas:
Get-Content
(alias:)gc
é sua opção usual para ler um arquivo de texto. Você pode filtrar ainda mais:Isso funciona bem o suficiente para arquivos pequenos, os maiores (mais do que alguns MiB) são provavelmente um pouco lentos.
As extensões da comunidade do PowerShell incluem alguns cmdlets para arquivos especializados (por exemplo, Get-FileTail).
fonte
-last 2
em um CSV de 1 GB. Bebida quente: ☕Get-Content -Tail 2
lugar. Isso é definitivamente mais rápido.gc log.txt | %{ $_ -replace '\d+', '($0)' } # sed
isso não é totalmente a ferramenta sed, uma vez que não coloca o conteúdo de volta. Ele precisa de Set-Content.-Last
é lento pela mesma razãoawk
que seria lento para a mesma tarefa: primeiro tem que consumir o stream completamente. É por isso queGet-Content -Tail
existe. E não háhead
porque não se encaixa nas convenções de nomenclatura e seu propósito já é servido porSelect-Item
.-head
. Veja minha resposta stackoverflow.com/a/41626586/1081043Aqui estão as maneiras integradas de fazer
head
etail
. Não use pipes, pois se você tiver um arquivo grande, será extremamente lento. Usar essas opções integradas será extremamente rápido, mesmo para arquivos grandes.fonte
| select -last
usa tubos. Estou usando-tail
sem canos. Mas se você encontrar duas respostas conflitantes, provavelmente poderá confiar na pessoa com uma reputação muito mais elevada. Além disso, você pode simplesmente tentar os dois métodos em um arquivo grande. Será muito óbvio em um arquivo grande.more.exe
existe no Windows, as portas deless
são facilmente encontradas (e as extensões da comunidade do PowerShell , PSCX, incluem uma).O PowerShell realmente não oferece nenhuma alternativa para separar programas para nenhum dos dois, mas para dados estruturados
Out-Grid
pode ser útil.Head
eTail
podem ser emulados com oSelect-Object
uso dos parâmetros-First
e-Last
respectivamente.Sed
todas as funções estão disponíveis, mas estruturadas de forma bastante diferente. As opções de filtragem estão disponíveis emWhere-Object
(ou viaForeach-Object
e algum estado para intervalos). Outras operações de transformação podem ser feitas comSelect-Object
eForeach-Object
.No entanto, à medida que o PowerShell passa (.NET) objetos - com toda a sua estrutura tipada, por exemplo. as datas permanecem como
DateTime
instâncias - em vez de apenas strings, que cada comando precisa para analisar a si mesmo, muitos desed
outros programas semelhantes são redundantes.fonte
"-TotalCount" nesta instância responde exatamente como "-head". Você tem que usar -TotalCount ou -head para executar o comando assim. Mas -TotalCount é enganoso - ele não funciona, REALMENTE, dando-lhe NENHUMA contagem ...
O script acima, testado em PS 5.1, tem a MESMA resposta abaixo ...
Então use '-head 25 "já!
fonte
Se você precisar consultar arquivos de log grandes (ou pequenos) no Windows, a melhor ferramenta que encontrei é o Log Parser 2.2 gratuito da Microsoft . Você pode chamá-lo do PowerShell se quiser e ele fará todo o trabalho pesado para você, e muito rápido também.
fonte
Eu tenho algumas soluções melhores:
fonte
Você não obtém todos os erros com o código pushpop BTW, seu código só funciona com a opção "sed". Todo o resto ignora qualquer coisa, exceto gc e path.
fonte