2012-03-13 9 views
57

Necesito estos comandos para verificar el archivo de registro en Windows, pero no instalo ningún programa, y ​​me gusta Powershell con Windows.¿Cómo hacer qué cabeza, cola, más, menos, sed hacer en Powershell?

+0

archivo de registro es demasiado grande, con varios MBytes. Es muy difícil de ver por notepad.exe. –

+0

Si está utilizando 'notepad' como su base, le sugiero que busque en los editores de texto alternativos, hay muchas alternativas (tanto gratuitas como de pago). Todos son superiores al bloc de notas (aunque eso no es un gran desafío). – Richard

+0

posible duplicado de [PowerShell vs. Unix Shells] (http://stackoverflow.com/questions/573623/powershell-vs-unix-shells) – manojlds

Respuesta

90

Get-Content (alias: gc) es su opción habitual para leer un archivo de texto. A continuación, puede filtrar aún más:

gc log.txt | select -first 10 # head 
gc -TotalCount 10 log.txt  # also head 
gc log.txt | select -last 10 # tail 
gc -Tail 10 log.txt   # also tail (since PSv3), also much faster than above option 
gc log.txt | more    # or less if you have it installed 
gc log.txt | %{ $_ -replace '\d+', '($0)' }   # sed 

Esto funciona lo suficientemente bien como para archivos pequeños, más grandes (más de unos pocos MIB) son probablemente un poco lento.

El PowerShell Community Extensions incluye algunos cmdlets para archivos especializados (por ejemplo, Get-FileTail).

+0

gracias, gran ayuda para mí. –

+1

Santa vaca, esto está maximizando mi CPU para hacer un '-las últimas 2' en un CSV de 1GB. Bebida caliente: ☕ – mlissner

+6

@mlissner: si usa PowerShell v3, puede usar 'Get-Content -Tail 2' en su lugar. Eso es definitivamente más rápido. – Joey

6

more.exe existe en Windows, los puertos de less son fáciles de encontrar (y el PowerShell Community Extensions, PSCX, incluye uno).

PowerShell en realidad no proporciona ninguna alternativa a los programas separados para ninguno, pero para los datos estructurados Out-Grid puede ser útil.

Head y Tail pueden ambos ser emulado con Select-Object utilizando los parámetros de -First y -Last respectivamente.

Sed funciones están todas disponibles pero estructuradas de manera diferente. Las opciones de filtrado están disponibles en Where-Object (o en Foreach-Object y en algún estado para rangos). Otras operaciones de transformación pueden realizarse con Select-Object y Foreach-Object.

Sin embargo, como PowerShell pasa (.NET) objetos - con toda su estructura tipada, ej. las fechas siguen siendo DateTime instancias, en lugar de solo cadenas, que cada comando necesita analizarse a sí mismo, gran parte de sed y otros programas similares son redundantes.

1

Si necesita consultar archivos de registro grandes (o pequeños) en Windows, la mejor herramienta que he encontrado es Log Parser 2.2 libre de Microsoft. Puedes llamarlo desde PowerShell si lo deseas y hará todo el trabajo pesado por ti, y muy rápido también.

+0

gracias de todos modos, mi entorno es Win2k8R2 que no está en los requisitos del sistema de Log Parser2.2 –

0

Tengo algunas soluciones mejores:

gc log.txt -ReadCount 5 | %{$_;throw "pipeline end!"} # head 
gc log.txt | %{$num=0;}{$num++;"$num $_"}    # cat -n 
gc log.txt | %{$num=0;}{$num++; if($num -gt 2 -and $num -lt 7){"$num $_"}} # sed 
15

Éstos son el incorporado en maneras de hacer head y tail. No use tuberías porque si tiene un archivo grande, será extremadamente lento. Usar estas opciones integradas será extremadamente rápido incluso para archivos grandes.

gc log.txt -head 10 
gc log.txt -tail 10 
gc log.txt -tail 10 -wait # equivalent to tail -f 
+0

pero [comentario de Joey] (https://stackoverflow.com/questions/9682024/how-to-do-what-head-tail- more-less-sed-do-in-powershell # comment60271566_9682594) parece indicar exactamente lo contrario. ¿Cómo sé en quién confiar o qué método (integrado) es más eficiente? –

+1

@NH Mi respuesta está de acuerdo con el comentario de Joey. Su comentario dice: "Lo último es lento ... Es por eso que Get-Content -Tail existe". '| select -last' usa tubos. Estoy usando '-tail' sin tubos. Pero si alguna vez encuentras dos respuestas conflictivas, probablemente puedas confiar en la persona con una reputación mucho más alta. Además, puedes simplemente probar los dos métodos en un archivo grande. Será muy obvio en un archivo grande. – wisbucky

+0

Entendido. Lo siento, debo haber estado confundido la primera vez que leí las publicaciones. –

Cuestiones relacionadas