PowerShell - 删除所有文本文件行,直到找到某个字符串

时间:2015-12-07 19:19:18

标签: powershell

我目前有一个输出日志文件有点混乱并且增长很快。它是权限邮箱的大型脚本的调试输出。我基本上只想删除文件中的每一行,直到它找到7天前的第一次迭代。

到目前为止,我可以返回包含该日期的所有行

elems = document.querySelectorAll('[data-select-gateway]');
for (var i = 0; i < elems.length; i++)
  elems[i].style.display = 'none';

但我无法找到一个功能来擦除所有东西,直到第一次找到它。

我试过了一个-replace:

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

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

但这似乎只是从包含指定字符串的每一行的开头替换。

2 个答案:

答案 0 :(得分:3)

如果您正在运行V4,则可以使用数组.Where()方法,并使用“SkipUntil”选项:

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

答案 1 :(得分:1)

如果您只想保留包含指定搜索字符串的条目,请执行以下操作:

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

如果需要,请将-notcontains "$lastweek"替换为-notlike "*$lastweek*",以便更好地进行匹配。