En las ventanas, uso de PowerShell, ¿cuáles son los comandos equivalentes a Linux head
, tail
, more
, less
y sed
?
windows
powershell
Yue Zhang
fuente
fuente
notepad
como base, le sugiero que busque editores de texto alternativos, hay muchas alternativas (gratuitas y de pago). Todos son superiores al bloc de notas (aunque eso no es un gran desafío).Respuestas:
Get-Content
(alias:)gc
es su opción habitual para leer un archivo de texto. A continuación, puede filtrar más:Esto funciona bastante bien para archivos pequeños, los más grandes (más de unos pocos MiB) son probablemente un poco lentos.
Las extensiones de la comunidad de PowerShell incluyen algunos cmdlets para archivos especializados (por ejemplo, Get-FileTail).
fuente
-last 2
CSV de 1GB. Bebida caliente: ☕Get-Content -Tail 2
en su lugar. Definitivamente es más rápido.gc log.txt | %{ $_ -replace '\d+', '($0)' } # sed
que en realidad no es completamente la herramienta sed, ya que no devuelve el contenido. Necesita Set-Content.-Last
es lento por la misma razónawk
que sería lento para la misma tarea: primero tiene que consumir el flujo por completo. Por esoGet-Content -Tail
existe. Y no hayhead
porque no encaja en las convenciones de nomenclatura, y su propósito ya está cumplidoSelect-Item
.-head
. Vea mi respuesta stackoverflow.com/a/41626586/1081043Aquí están las formas integradas de hacer
head
ytail
. No use tuberías porque si tiene un archivo grande, será extremadamente lento. El uso de estas opciones integradas será extremadamente rápido incluso para archivos grandes.fuente
| select -last
utiliza tuberías. Estoy usando-tail
sin tuberías. Pero si alguna vez encuentra dos respuestas contradictorias, probablemente podría confiar en la persona con una reputación mucho más alta. Además, puede simplemente probar los dos métodos en un archivo grande. Será muy obvio en un archivo grande.more.exe
existe en Windows, los puertos deless
se encuentran fácilmente (y las Extensiones de la comunidad de PowerShell , PSCX, incluyen una).PowerShell realmente no ofrece ninguna alternativa a los programas separados para ninguno de los dos, pero para los datos estructurados
Out-Grid
puede ser útil.Head
yTail
ambos pueden emularseSelect-Object
usando los parámetros-First
y-Last
respectivamente.Sed
todas las funciones están disponibles pero estructuradas de manera bastante diferente. Las opciones de filtrado están disponibles enWhere-Object
(o víaForeach-Object
y algún estado para rangos). Se pueden realizar otras operaciones de transformación conSelect-Object
yForeach-Object
.Sin embargo, a medida que PowerShell pasa objetos (.NET), con toda su estructura escrita, por ejemplo. las fechas siguen siendo
DateTime
instancias, en lugar de solo cadenas, que cada comando necesita analizar por sí mismo, muchos desed
estos programas y otros son redundantes.fuente
"-TotalCount" en este caso responde exactamente como "-head". Tienes que usar -TotalCount o -head para ejecutar el comando de esa manera. Pero -TotalCount es engañoso - no funciona REALMENTE dándote NINGÚN recuento ...
El script anterior, probado en PS 5.1 es la MISMA respuesta que a continuación ...
¡Entonces solo usa '-head 25 "ya!
fuente
Si necesita consultar archivos de registro grandes (o pequeños) en Windows, la mejor herramienta que he encontrado es Log Parser 2.2 gratuito de Microsoft . Puede llamarlo desde PowerShell si lo desea y hará todo el trabajo pesado por usted, y muy rápido también.
fuente
Tengo algunas mejores soluciones:
fuente
No obtienes todos los errores con el código pushpop Por cierto, tu código solo funciona con la opción "sed". Todo el resto ignora todo menos gc y path.
fuente