循环遍历文件并删除多行不同文本

3

我正在尝试循环遍历文件并删除不需要的行。文件中的行具有唯一且不变的编号。目前我的代码在foreach循环中不能删除该行,但单独使用时可以实现。

$FSEFiles=get-childitem E:\FSE*.txt

foreach ($file in $FSEFiles)

{

    try

    {
        (Get-Content $file.PSPath) | 
        Foreach-Object  { Where-Object { $_ -notmatch "15987@" } } |
        Foreach-Object  { Where-Object { $_ -notmatch "16422@" } } | 
        #Foreach-Object {Where-Object { $_ -notmatch "17526@"}} | 
        #Foreach-Object {Where-Object { $_ -notmatch "17527@"}} | 
        #Foreach-Object {Where-Object { $_ -notmatch "17528@"}} | 
        #Foreach-Object {Where-Object { $_ -notmatch "17530@"}} | 
        #Foreach-Object {Where-Object { $_ -notmatch "17531@"}} | 
        #Foreach-Object {Where-Object { $_ -notmatch "17532@"}} | 
        Set-Content $file.PSPath

        write-host $file updated
    }
    catch
    {
        write-host Error editing $file
    }
}

我有点错过了什么,使得这个循环可以在每一行上运行?
1个回答

3

既然您已经在使用正则表达式,让我们将所有这些要求合并到一个漂亮的正则表达式字符串中。

$regex = "(15987@|16422@|1752[6-8]@|1753[0-2]@)"

$data = Get-Content $file.PSPath 
$data | Where-Object{$_ -notmatch $regex} | Set-Content $file.PSPath

也许像这样会使它更加简洁。虽然没有经过测试,但应该可以工作。你所拥有的可能在某些地方有效,但是foreachwhere的组合似乎存在一些问题(因此提出了问题),但我认为试图解决这个问题是多余的。

太完美了!它恰好做了我需要的事情。谢谢。 - Alan
很高兴能够帮到你。请考虑在左侧的投票下方用勾号将其标记为答案。 - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接