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

时间:2014-12-19 16:46:48

标签: loops powershell foreach where

我正在尝试遍历文件并删除不需要的行。文件中的行具有不会更改的唯一编号。到目前为止,我没有删除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 个答案:

答案 0 :(得分: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的结合似乎有些不合适(因此问题),但尝试解决我想的问题是多余的。