2012-02-10 58 views
16

我知道,我可以使用:删除文本文件中的空行使用PowerShell

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

删除空行。但我怎样才能用'-replace'去除它们?

+3

你为什么要替换?并处理您的接受率 – manojlds 2012-02-10 06:09:02

+0

我的答案用'-replace' [比较运算符]删除空行(http://technet.microsoft.com/zh-cn/library/dd315321.aspx)。 'Get-Content'没有替换参数,所以我假设你正在寻找一种方法来和操作符一起做。 – 2012-02-10 07:47:16

回答

1

你不能做替换,你必须用SOMETHING替代SOMETHING,而你两者都没有。

+0

是Poowershell支持-remove“”删除emply行吗? – Suliman 2012-02-10 06:39:06

+0

不,它似乎并不支持“ - 删除”。 – Suliman 2012-02-10 06:46:14

+1

你在说苹果和橘子。删除和替换显然不同。你有什么基本的工作,但也许你正试图重建现有的文件,但没有空白。 PS C:\> $ text = get-content a.txt PS C:\> $ text |其中{$ _} | out-file a.txt – 2012-02-10 13:22:52

0

这将删除只有空格字符(制表符/空格)的空行或行。

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

您可以改用-match当量,如果你也想排除只包含空格字符的文件:

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

我发现这里一个很好的一个衬垫>>http://www.pixelchef.net/remove-empty-lines-file-powershell。只用几条空白行进行测试,包括只包含换行符,以及只包含空格,只是制表符和组合的行。

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

请参阅原始有关代码的一些说明。尼斯:)

+1

我认为我更喜欢'(gc file.txt)| ? {-not $ _。IsNullOrWhiteSpace()} | set-content file.txt“,因为它更清楚地表达了意图,但它相当于同样的事情。 – 2014-10-20 11:42:31

+0

简短的一瞥,我似乎没有在我的字符串上的“IsNullOrWhiteSpace()”方法......并且......实例方法如何检查null?发布的答案很好,但! – xdhmoore 2017-01-15 19:39:21

+0

IsNullOrWhiteSpace是System.String对象的静态方法,在PowerShell中调用它的正确方法如下:'[String] :: IsNullOrWhiteSpace({你的字符串})''。基于Neil Barnwell的正确命令行注释如下: '(gc file.txt)| ? {-not [String] :: IsNullOrWhiteSpace($ _)} |设置内容file.txt' – LMA1980 2018-02-14 17:23:39

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

聚苯乙烯:我知道这是在一天的旧时间,但其他一些人也可能会受益。 – Nonso 2013-11-12 07:43:30

0

这消除了尾部的空格和空行,从file.txt的

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

未进行具体使用-replace,但你得到同样的效果解析使用-notmatch和正则表达式的内容。

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

这片兰迪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) 
0

如果你真的要过滤从文件中的空行,那么你可以试试这个:

(GC $ source_file).Trim()| ? {$ _。Length -gt 0}

相关问题