2012-02-10 2 views
16

So che posso usare:rimuovere le righe vuote da file di testo con PowerShell

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

per rimuovere le linee vuote. Ma come posso rimuoverli con '-replace'?

+3

Perché si desidera sostituire? E lavora sul tuo tasso di accettazione – manojlds

+0

La mia risposta rimuove le righe vuote con '-replace' [operatore di confronto] (http://technet.microsoft.com/en-us/library/dd315321.aspx). 'Get-Content' non ha un parametro di sostituzione, quindi presumo che tu stia cercando un modo per farlo con l'operatore. –

risposta

1

Non si può fare la sostituzione, è necessario sostituire QUALCOSA con QUALCOSA, e non avete entrambi.

+0

è il supporto di Poowerhell -remove "" per rimuovere linee emply? – Suliman

+0

No, sembra che non abbia il supporto di "-remove". – Suliman

+1

Stai parlando di mele e arance. Rimuovi e sostituisci sono chiaramente diversi. Quello che hai funzionerà fondamentalmente, ma forse stai cercando di ricostruire il file esistente ma senza gli spazi vuoti. PS C: \> $ text = get-content a.txt PS C: \> $ testo | dove {$ _} | out-file a.txt –

0

Questo rimuoverà linee o righe vuote con solo caratteri di spazi (tab/spazi).

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

È possibile utilizzare -match invece eq se si vuole anche escludere i file che contengono solo caratteri di spaziatura:

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

ho trovato un bel uno di linea qui >>http://www.pixelchef.net/remove-empty-lines-file-powershell. È stato testato con diverse righe di spazi vuoti, incluse le nuove righe e le linee con solo spazi, solo schede e combinazioni.

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

Vedere l'originale per alcune note sul codice. Nizza :)

+1

Penso che a bilanciamento preferisco '(gc file.txt) | ? {-not $ _. IsNullOrWhiteSpace()} | set-content file.txt' perché esprime l'intento in modo più chiaro, ma equivale alla stessa cosa. –

+0

A colpo d'occhio, non sembra che abbia il metodo "IsNullOrWhiteSpace()" sulle mie stringhe ... e ... come potrebbe un metodo di istanza controllare null? La risposta postata funziona benissimo però! – xdhmoore

+0

IsNullOrWhiteSpace è un metodo statico dell'oggetto System.String il modo corretto di chiamarlo in PowerShell è il seguente: '[String] :: IsNullOrWhiteSpace ({your string})'. La corretta riga di comando sul commento di Neil Barnwell è la seguente: '(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

PS: so che è molto vecchio durante il giorno, ma anche qualcun altro potrebbe trarne beneficio .. – Nonso

0

Questo rimuove gli spazi finali e le righe vuote da file.txt

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

Non specificamente utilizzando -replace, ma si ottiene lo stesso effetto l'analisi del contenuto utilizzando -notmatch e regex.

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

Questo pezzo di codice da Randy Skretka sta lavorando bene per me, ma ho avuto il problema, che avevo ancora una nuova riga alla fine del file.

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

così ho aggiunto finalmente questo:

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

Se effettivamente desidera filtrare le righe vuote da un file, allora si può provare questo:

(gc $ source_file) .Trim() | ? {$ _. Lunghezza -gt 0}