2010-04-20 9 views
16

Me estoy frustrando un poco en un pequeño script de PowerShell que estoy escribiendo.Evite los saltos de línea al usar el archivo

Básicamente recorro los archivos de texto para verificar cada línea contra una matriz de patrones de expresiones regulares. El resultado se canaliza al cmdlet out-file que lo agrega a otro archivo de texto.

Get-ChildItem $logdir -Recurse -Include @('*.txt') | Get-Content | ForEach-Object { 
Select-String $patterns -InputObject $_ | Out-File $csvpath -Append -Width 1000 } 

Mi problema es que yo no puedo salir en archivos de omitir los rompe línea adicional que crea en el archivo detrás $ csvpath (tres después de cada línea). Podría utilizar las clases de .NET Framework para lograr lo mismo, pero preferiría recurrir a PowerShell puro ;-)

Cualquier ayuda es muy apreciada.

Kevin

+2

'foreach {Select-String -InputObject $ _}'? ¿Por qué no simplemente conectar directamente a 'Select-String'? – Joey

+0

Hola Johannes, para ser honesto, no sé cómo esto podría ayudar. – bitfrickler

+0

No fue una respuesta a su problema (de ahí un comentario a su pregunta y * no * una respuesta); solo una nota de cómo podrías reducir el desorden en tu comando allí. – Joey

Respuesta

9

¿Por qué no utilizar Add-Content?

gci $logdir -rec *.txt | gc | select-string $pattern | add-content $csvpath 

No es necesario especificar el ancho y -append interruptor, el tamaño del archivo no se duplica por defecto (aunque se puede especificar la codificación) y parece que no hay ningún problema con las líneas vacías como que tiene .

+0

Me alegra ayudar;) Funciona, pero en general puede ser complicado formatear algunos objetos. En este caso, supongo que se llama a 'ToString()' en cada objeto 'MatchInfo'. Para muchos otros tipos 'ToString()' devuelve solo un nombre de tipo (sin información útil). Entonces es necesario ya que Keith sugiere especificar propiedades concretas. – stej

10

Tenga en cuenta que las salidas Select-String Matchinfo objetos y no a las cadenas - como se desprende de este comando:

gci $logdir -r *.txt | gc | select-string $patterns | format-list * 

Usted está solicitando una representación implícita del objeto Matchinfo de cadena antes de salir al archivo. Por alguna razón que no entiendo, esto está causando que salgan líneas en blanco adicionales. Puede solucionar este problema mediante la especificación de que sólo desea la salida de la propiedad línea al archivo ej .:

gci $logdir -r *.txt | gc | select-string $patterns | %{$_.Line} | 
    Out-File $csvpath -append -width 1000 
Cuestiones relacionadas