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'?
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 :)
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)
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
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
(Get-Content c:\FileWithEmptyLines.txt) |
Foreach { $_ -Replace "Old content", " New content" } |
Set-Content c:\FileWithEmptyLines.txt;
Vous ne pouvez pas remplacer, vous devez remplacer SOMETHING par SOMETHING, et vous n’avez pas non plus les deux.
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"
Si vous voulez réellement filtrer les lignes vides d'un fichier, essayez ceci:
(gc $ fichier_source) .Trim () | ? {$ _. Longueur -gt 0}
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