2010-04-20 80 views
16

我在寫一個小小的PowerShell腳本時感到有些沮喪。使用out-file時避免換行

基本上,我通過文本文件循環檢查每一行對正則表達式模式的數組。 將結果傳送到將其附加到另一個文本文件的out-file cmdlet。

Get-ChildItem $logdir -Recurse -Include @('*.txt') | Get-Content | ForEach-Object { 
Select-String $patterns -InputObject $_ | Out-File $csvpath -Append -Width 1000 } 

我的問題是,我無法脫身文件忽略這些額外的換行符,它創造的背後$ csvpath文件(三級每行之後)英寸 我可以使用.NET框架類來實現同樣的事情,但我寧願堅持純PowerShell ;-)

任何幫助,非常感謝。

凱文

+2

'foreach {Select-String -InputObject $ _}'?爲什麼不直接直接輸入'Select-String'呢? – Joey 2010-04-20 13:55:25

+0

嗨約翰內斯, 說實話,我不知道這可能會有所幫助。 – bitfrickler 2010-04-20 14:11:33

+0

這不是你的問題的答案(因此對你的問題發表評論,而不是*回答);只是記錄你如何在你的指揮中減少混亂。 – Joey 2010-04-20 18:21:41

回答

9

你爲什麼不使用Add-Content您可以通過指定解決這一問題?

gci $logdir -rec *.txt | gc | select-string $pattern | add-content $csvpath 

你並不需要指定的寬度和-append開關,文件的大小默認情況下不增加一倍(儘管你可以指定編碼),似乎是沒有問題的空行像你有。

+0

很高興提供幫助;)它可以工作,但通常格式化一些對象可能會很棘手。在這種情況下,我猜'每個'MatchInfo'對象都會調用'ToString()'。對於許多其他類型,'ToString()'只返回一個類型名稱(沒有有用的信息)。然後,Keith建議指定具體的屬性是需要的。 – stej 2010-04-21 06:14:33

10

記住MatchInfo對象,而不是字符串的選擇字符串輸出 - 作爲由該命令顯示:

gci $logdir -r *.txt | gc | select-string $patterns | format-list * 

你問的MatchInfo對象的字符串隱式渲染在輸出到文件之前。出於某種原因,我不明白,這是導致額外的空行輸出。您只需要Line屬性輸出到文件例如爲:

gci $logdir -r *.txt | gc | select-string $patterns | %{$_.Line} | 
    Out-File $csvpath -append -width 1000