2015-12-07 108 views
2

我目前有一個輸出日誌文件,這個文件有點亂,並且快速增長。這是用於權限郵箱的大型腳本的調試輸出。我基本上只想刪除文件中的每一行,直到找到7天前的第一次迭代。PowerShell - 刪除文本文件的所有行,直到找到某個字符串

到目前爲止,我可以返回一個包含日期

$content = Get-Content $file 
$lastweek = "{0:M/d/yyyy}" -f (get-date).AddDays(-7) 

$content | Where-Object { $_.Contains("$lastweek") } 

都行,但直到被發現,第一次我想不通的功能,只是消滅一切。

我已經嘗試了-replace:

$content -replace ".*$lastweek", " " | Set-Content $file -Force 

但這似乎只從包含指定字符串的每一行的開頭代替。

回答

3

如果你正在運行V4,您可以使用數組.Where()方法,用「SkipUntil」選項:

$content.Where({ $_ -like "*$lastweek*" },'SkipUntil') 
+0

拋出一個方法錯誤: 「方法的調用失敗,因爲[System.String]不包含名爲‘喜歡’方法」 我得到它一起工作: '$ content.Where({$ _ - like(「* $ lastweek *」)},'SkipUntil')' 謝謝。 – Justin

+0

我的錯。我會解決答案。 – mjolinor

1

如果你想只保留從日誌文件中包含您指定的搜索字符串的條目,你可以做一些效果:

$content = Get-Content $file | Where-Object {$_ -notcontains "$lastweek"} 
$content | Set-Content $file -force 

,如果需要更好的匹配替換-notcontains "$lastweek"-notlike "*$lastweek*"

+0

在我的情況下,我希望在該字符串的第一次迭代之後保留所有內容。整天在文件中有條目,因此我不想在該日期之間丟失所有內容。不過,請欣賞迴應。 – Justin

+0

明白了。沒問題。 – bentek

相關問題