2012-02-10 83 views
16

Sé que puedo usar:eliminar las líneas vacías de archivo de texto con PowerShell

gc c:\FileWithEmptyLines.txt | where {$_ -ne ""} > c:\FileWithNoEmptyLines.txt 

para eliminar las líneas vacías. Pero, ¿cómo puedo eliminarlos con '-replace'?

+3

¿Por qué quieres reemplazar? Y trabaje en su tasa de aceptación – manojlds

+0

Mi respuesta elimina las líneas vacías con '-replace' [operador de comparación] (http://technet.microsoft.com/en-us/library/dd315321.aspx). 'Get-Content' no tiene un parámetro de reemplazo, así que supongo que está buscando una forma de hacerlo con el operador. –

Respuesta

1

No puede reemplazar, tiene que reemplazar ALGO con ALGO, y usted tampoco tiene ambos.

+0

es el soporte de Poowershell -remover "" para eliminar las líneas emply? – Suliman

+0

No, parece que no tiene soporte para "-remove". – Suliman

+1

Estás hablando de manzanas y naranjas. Eliminar y reemplazar son claramente diferentes. Lo que tienes, básicamente, funcionará, pero tal vez estés tratando de reconstruir el archivo existente, pero sin los espacios en blanco. PS C: \> $ text = get-content a.txt PD C: \> $ text | donde {$ _} | out-file a.txt –

0

Esto eliminará las líneas o líneas vacías con solo espacios en blanco (pestañas/espacios).

[IO.File]::ReadAllText("FileWithEmptyLines.txt") -replace '\s+\r\n+', "`r`n" | Out-File "c:\FileWithNoEmptyLines.txt" 
5

Usted puede utilizar -match lugar eq si también desea excluir archivos que sólo contienen espacios en blanco:

@(gc c:\FileWithEmptyLines.txt) -match '\S' | out-file c:\FileWithNoEmptyLines 
34

me encontré con un buen chiste aquí >>http://www.pixelchef.net/remove-empty-lines-file-powershell. Simplemente lo probé con varias líneas de espacios en blanco, incluidas líneas nuevas, así como líneas con espacios, solo pestañas y combinaciones.

(gc file.txt) | ? {$_.trim() -ne "" } | set-content file.txt 

Consulte el original para algunas notas sobre el código. Agradable :)

+1

Creo que en balance prefiero '(gc file.txt) | ? {-not $ _. IsNullOrWhiteSpace()} | set-content file.txt' porque expresa la intención más claramente, pero equivale a lo mismo. –

+0

En un breve vistazo, no parece tener el método "IsNullOrWhiteSpace()" en mis cadenas ... y ... ¿cómo podría un método de instancia comprobar nulo? ¡La respuesta publicada funciona muy bien! – xdhmoore

+0

El IsNullOrWhiteSpace es un método estático del objeto System.String, la forma correcta de llamarlo en PowerShell es el siguiente: '[String] :: IsNullOrWhiteSpace ({your string})'. La línea de comando correcta en el comentario de Neil Barnwell es la siguiente: '(gc file.txt) | ? {-not [String] :: IsNullOrWhiteSpace ($ _)} | set-content file.txt' – LMA1980

0
(Get-Content c:\FileWithEmptyLines.txt) | 
    Foreach { $_ -Replace "Old content", " New content" } | 
    Set-Content c:\FileWithEmptyLines.txt; 
+0

PD: sé que esto es muy viejo en el día, pero otros también podrían beneficiarse .. – Nonso

0

Esto elimina espacios en blanco y las líneas en blanco archivo.txt

PS C:\Users\> (gc file.txt) | Foreach {$_.TrimEnd()} | where {$_ -ne ""} | Set-Content file.txt 
0

No específicamente utilizando -replace, pero se obtiene el mismo efecto al analizar el contenido usando -notmatch y expresiones regulares.

(get-content 'c:\FileWithEmptyLines.txt') -notmatch '^\s*$' > c:\FileWithNoEmptyLines.txt 
6

Esta pieza de código de Randy Skretka está trabajando muy bien para mí, pero tenía el problema, que todavía tenía una nueva línea al final del archivo.

(gc file.txt) | ? {$_.trim() -ne "" } | set-content file.txt

por lo que añade finalmente esto:

$content = [System.IO.File]::ReadAllText("file.txt") 
$content = $content.Trim() 
[System.IO.File]::WriteAllText("file.txt", $content) 
0

Si realmente se desea filtrar líneas en blanco de un archivo, entonces puede intentar esto:

(GC $ source_file) .Trim() | ? {$ _. Length -gt 0}

Cuestiones relacionadas