удалить пустые строки из текстового файла с помощью PowerShell - PullRequest
21 голосов
/ 10 февраля 2012

Я знаю, что могу использовать:

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

для удаления пустых строк.Но как я могу удалить их с помощью '-replace'?

Ответы [ 10 ]

44 голосов
/ 12 июня 2012

Я нашел здесь один хороший лайнер >> http://www.pixelchef.net/remove-empty-lines-file-powershell. Только что протестировал его с несколькими пустыми строками, включая только новые строки, а также строки с пробелами, только табуляцией и комбинациями.

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

См. Оригинал для некоторых заметок о коде. Ницца:)

13 голосов
/ 08 марта 2016

Этот кусок кода от Рэнди Скретки работает для меня нормально, но у меня была проблема, что у меня все еще был символ новой строки в конце файла.

Итак, я наконец добавил следующее:

$content = [System.IO.File]::ReadAllText("file.txt")
$content = $content.Trim()
[System.IO.File]::WriteAllText("file.txt", $content)
8 голосов
/ 10 февраля 2012

Вы можете использовать -match вместо -eq, если вы также хотите исключить файлы, содержащие только пробельные символы:

@(gc c:\FileWithEmptyLines.txt) -match '\S'  | out-file c:\FileWithNoEmptyLines
3 голосов
/ 13 августа 2015

Специально не используется -replace, но вы получаете тот же эффект при разборе содержимого, используя -notmatch и регулярное выражение.

(get-content 'c:\FileWithEmptyLines.txt') -notmatch '^\s*$' > c:\FileWithNoEmptyLines.txt
1 голос
/ 08 марта 2018

Если вы действительно хотите отфильтровать пустые строки из файла, вы можете попробовать это:

(gc $ source_file) .Trim () |?{$ _. Длина -gt 0}

1 голос
/ 12 ноября 2013
(Get-Content c:\FileWithEmptyLines.txt) | 
    Foreach { $_ -Replace  "Old content", " New content" } | 
    Set-Content c:\FileWithEmptyLines.txt;
1 голос
/ 10 февраля 2012

Вы не можете сделать замену, вы должны заменить ЧТО-ТО на ЧТО-ТО, и у вас обоих нет обоих.

0 голосов
/ 17 мая 2019

файл

PS / home / edward / Desktop> Get-Content ./copy.txt

[Desktop Entry]

Имя = калибр Exec = ~ / Apps / calibre/ Калибр

Значок = ~ / Приложения / Калибр / Ресурсы / Контент-сервер / calibre.png

Тип = Приложение *


Начать с получениясодержимое из файла и обрезать пробелы, если таковые имеются в каждой строке текстового документа.Это становится объектом, передаваемым объекту where для прохождения через массив, просматривая каждый элемент массива с длиной строки больше 0. Этот объект передается для замены содержимого файла, с которого вы начали.Вероятно, было бы лучше создать новый файл ... Последнее, что нужно сделать, - это прочитать содержимое вновь созданного файла и увидеть вашу удивительность.

(Get-Content ./copy.txt).Trim() | Where-Object{$_.length -gt 0} | Set-Content ./copy.txt

Get-Content ./copy.txt

0 голосов
/ 16 мая 2014

Удаляет завершающие пробелы и пустые строки из файла file.txt

PS C:\Users\> (gc file.txt) | Foreach {$_.TrimEnd()} | where {$_ -ne ""} | Set-Content file.txt
0 голосов
/ 10 февраля 2012

Это удалит пустые строки или строки, содержащие только пробельные символы (табуляции / пробелы).

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