正则表达式替换文件内容并删除不匹配的行

Regex replace contents of file and delete lines that don't match

我有一个很大的日志文件,我想从中提取某些类型的行。我创建了一个工作正则表达式来匹配这些行。我现在如何使用此正则表达式来提取行而不是其他内容?我试过了

cat .\file | %{ 
    if($_ -match "..."){
        $_ -replace "...", '...'
    }
    else{

        $_ -replace ".*", ""
    }
}

这几乎可以工作,但不感兴趣的行仍然保留为空白行(意味着感兴趣的行间隔很远)。

最好的方法是完全删除 else 子句。如果你这样做,那么 ForEach-Object 块的迭代不会返回任何对象。

cat .\file | %{ 
    if($_ -match "..."){
        $_ -replace "...", '...'
    }
}

只需附加到 ,您甚至不需要循环结构。 -match-replace 将用作数组运算符。删除 ifForEach-Object.

的需要
(Get-Content .\file) -match "..." -replace "...","..."

Get-Content 是别名的目标 cat