Удалите пустые строки из текстового файла с помощью PowerShell - программирование
Подтвердить что ты не робот

Удалите пустые строки из текстового файла с помощью PowerShell

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Этот фрагмент кода от Randy Skretka отлично работает для меня, но у меня была проблема, что у меня все еще была новая строка в конце файла.

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

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

Это приведет к удалению пустых строк или строк только с пробельными символами (вкладки/пробелы).

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

Ответ 9

Это удаляет конечные пробелы и пустые строки из файла file.txt

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

Ответ 10

файл

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

[Desktop Entry]

Имя = Калибр Exec = ~/Приложения/Калибр/Калибр

Icon = ~/Apps/Калибр/ресурсы/контент-сервер/calibre.png

Type = Application *


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

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

Get-Content./copy.txt