我知道我可以使用:
gc c:\FileWithEmptyLines.txt | where {$_ -ne ""} > c:\FileWithNoEmptyLines.txt
删除空行。但我如何用'-replace'删除它们?
答案 0 :(得分:43)
我在这里发现了一个不错的衬垫>> http://www.pixelchef.net/remove-empty-lines-file-powershell。只是测试了几个空白行,包括换行符,以及只有空格的行,只有标签和组合。
(gc file.txt) | ? {$_.trim() -ne "" } | set-content file.txt
有关代码的一些注意事项,请参阅原件。尼斯:)
答案 1 :(得分:12)
这段来自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)
答案 2 :(得分:8)
如果您还要排除仅包含空格字符的文件,则可以使用-match而不是-eq:
@(gc c:\FileWithEmptyLines.txt) -match '\S' | out-file c:\FileWithNoEmptyLines
答案 3 :(得分:3)
没有专门使用-replace
,但您使用-notmatch
和正则表达式解析内容的效果相同。
(get-content 'c:\FileWithEmptyLines.txt') -notmatch '^\s*$' > c:\FileWithNoEmptyLines.txt
答案 4 :(得分:1)
你不能替换,你必须用SOMETHING取代SOMETHING,你们两个都没有。
答案 5 :(得分:1)
(Get-Content c:\FileWithEmptyLines.txt) |
Foreach { $_ -Replace "Old content", " New content" } |
Set-Content c:\FileWithEmptyLines.txt;
答案 6 :(得分:1)
如果您确实要从文件中过滤空白行,那么您可以尝试这样做:
(gc $ source_file).Trim()| ? {$ _。长度-gt 0}
答案 7 :(得分:1)
要通过RegEx解决此问题,您需要使用多行标记(?m):
((Get-Content file.txt -Raw) -replace "(?m)^\s*`r`n",'').trim() | Set-Content file.txt
答案 8 :(得分:0)
这将删除仅包含空白字符(制表符/空格)的空行或空行。
[IO.File]::ReadAllText("FileWithEmptyLines.txt") -replace '\s+\r\n+', "`r`n" | Out-File "c:\FileWithNoEmptyLines.txt"
答案 9 :(得分:0)
这将从file.txt
中删除尾随空格和空白行PS C:\Users\> (gc file.txt) | Foreach {$_.TrimEnd()} | where {$_ -ne ""} | Set-Content file.txt
答案 10 :(得分:0)
文件
PS / home / edward / Desktop>
Get-Content ./copy.txt
[桌面输入]
名称=口径 Exec =〜/ Apps / calibre / calibre
Icon =〜/ Apps / calibre / resources / content-server / calibre.png
Type = Application *
首先从文件中获取内容,如果在文本文档的每一行中都发现空白,则将其修剪。这将成为传递给where-object的对象,以遍历该数组,查看字符串长度大于0的数组的每个成员。传递该对象以替换您开始使用的文件的内容。制作一个新文件可能会更好... 最后要做的是读回新创建的文件的内容,并查看您的功能。
(Get-Content ./copy.txt).Trim() | Where-Object{$_.length -gt 0} | Set-Content ./copy.txt
Get-Content ./copy.txt