2012-02-10 57 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}

相關問題