【问题标题】:PowerShell - Remove all lines of text file until a certain string is foundPowerShell - 删除所有文本文件行,直到找到某个字符串
【发布时间】:2015-12-07 19:19:17
【问题描述】:

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

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

$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

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

【问题讨论】:

    标签: powershell


    【解决方案1】:

    如果您运行的是 V4,则可以使用数组 .Where() 方法,以及 'SkipUntil' 选项:

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

    【讨论】:

    • 这会引发方法错误:“方法调用失败,因为 [System.String] 不包含名为 'like' 的方法”我可以使用它:$content.Where({ $_ -like ("*$lastweek*") },'SkipUntil') 谢谢。
    • 我的错。我会修复答案。
    【解决方案2】:

    如果您只想保留该日志文件中包含指定搜索字符串的条目,您可以执行以下操作:

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

    如果需要更好的匹配,请将-notcontains "$lastweek" 替换为-notlike "*$lastweek*"

    【讨论】:

    • 在我的情况下,我想在第一次迭代该字符串后保留所有内容。文件中全天都有条目,所以我不想丢失该日期行之间的所有内容。不过,感谢您的回应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多