web-dev-qa-db-fra.com

supprimer les lignes vides du fichier texte avec PowerShell

Je sais que je peux utiliser:

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

supprimer les lignes vides. Mais comment puis-je les supprimer avec '-replace'?

18
Suliman

J'ai trouvé un beau doublure ici >> http://www.pixelchef.net/remove-empty-lines-file-powershell . Vient de le tester avec plusieurs lignes vides, y compris les nouvelles lignes uniquement, ainsi que des lignes contenant uniquement des espaces, des tabulations et des combinaisons.

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

Voir l'original pour quelques notes sur le code. Agréable :)

38
Randy Skretka

Ce morceau de code de Randy Skretka fonctionne bien pour moi, mais j’ai eu le problème, j’avais toujours une nouvelle ligne à la fin du fichier.

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

Alors j'ai finalement ajouté ceci:

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

Vous pouvez utiliser -match à la place -eq si vous souhaitez également exclure des fichiers ne contenant que des caractères d'espacement:

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

N'utilisez pas spécifiquement -replace, mais vous obtenez le même effet en analysant le contenu avec -notmatch et regex.

(get-content 'c:\FileWithEmptyLines.txt') -notmatch '^\s*$' > c:\FileWithNoEmptyLines.txt
2
joel
(Get-Content c:\FileWithEmptyLines.txt) | 
    Foreach { $_ -Replace  "Old content", " New content" } | 
    Set-Content c:\FileWithEmptyLines.txt;
1
Nonso

Vous ne pouvez pas remplacer, vous devez remplacer SOMETHING par SOMETHING, et vous n’avez pas non plus les deux.

1
user1129665

Cela supprimera les lignes vides ou les lignes ne contenant que des caractères blancs (tabulations/espaces).

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

Si vous voulez réellement filtrer les lignes vides d'un fichier, essayez ceci:

(gc $ fichier_source) .Trim () | ? {$ _. Longueur -gt 0}

0
Max

Cela supprime les espaces et les lignes vides de fichier.txt.

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