Я знаю, что могу использовать:
gc c:\FileWithEmptyLines.txt | where {$_ -ne ""} > c:\FileWithNoEmptyLines.txt
удалить пустые строки. Но как я могу удалить их с помощью "-replace"?
Я знаю, что могу использовать:
gc c:\FileWithEmptyLines.txt | where {$_ -ne ""} > c:\FileWithNoEmptyLines.txt
удалить пустые строки. Но как я могу удалить их с помощью "-replace"?
Я нашел приятный один лайнер здесь → http://www.pixelchef.net/remove-empty-lines-file-powershell. Просто протестируйте его с несколькими линиями пробелов, включая новые строки, а также строки с пробелами, просто вкладками и комбинациями.
(gc file.txt) | ? {$_.trim() -ne "" } | set-content file.txt
См. оригинал для некоторых заметок о коде. Nice:)
Этот фрагмент кода от 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)
Вы можете использовать -match вместо -eq, если вы также хотите исключить файлы, содержащие только пробельные символы:
@(gc c:\FileWithEmptyLines.txt) -match '\S' | out-file c:\FileWithNoEmptyLines
Не специально используя -replace
, но вы получаете тот же эффект, анализируя содержимое с помощью -notmatch
и regex.
(get-content 'c:\FileWithEmptyLines.txt') -notmatch '^\s*$' > c:\FileWithNoEmptyLines.txt
Вы не можете заменить, вы должны заменить SOMETHING SOMETHING, и у вас обоих нет.
(Get-Content c:\FileWithEmptyLines.txt) |
Foreach { $_ -Replace "Old content", " New content" } |
Set-Content c:\FileWithEmptyLines.txt;
Если вы действительно хотите отфильтровать пустые строки из файла, вы можете попробовать это:
(gc $ source_file).Trim() | ? {$ _. Длина -gt 0}
Это приведет к удалению пустых строк или строк только с пробельными символами (вкладки/пробелы).
[IO.File]::ReadAllText("FileWithEmptyLines.txt") -replace '\s+\r\n+', "`r`n" | Out-File "c:\FileWithNoEmptyLines.txt"
Это удаляет конечные пробелы и пустые строки из файла file.txt
PS C:\Users\> (gc file.txt) | Foreach {$_.TrimEnd()} | where {$_ -ne ""} | Set-Content file.txt
файл
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