Powershell 2 在 Select-String“.*_.*=-1”上冻结

Powershell 2 在 Select-String“.*_.*=-1”上冻结

这可能看起来像一个愚蠢的问题,但我有 PS 问题:就像标题所说的那样,我尝试了类似的事情:

 $all = gci D:\work\
 $all | Select-String ".*_.*=-1"

(我正在寻找名称中值为 -1 且带有 _ 的配置选项)问题是 PS 冻结,也就是说它无法在合理的时间内完成,ctrl +c 不起作用。当然,您可以说数据太多了,它无法处理,但问题是 grep 在同一个文件夹和同一个正则表达式上需要 1-2 秒。

Grep 命令是(最初它没有 -r,但我在一些注释之后添加了它,grep 仍然很快,但需要 20-30 秒)

grep ".*_.*=-1" -r D:\work\*

编辑:

$all  | ForEach-Object {echo $_.Name;  $_|Select-String ".*_.*=-1"      }

显示文件名很慢...我猜问题在于 PS 中的 Regex 速度太慢了...

答案1

具体:
尝试调整正则表达式以

 [^_]*_[^=]*=-1

等效 grep 版本:

grep -P '[^_]*_[^=]*=-1'

一般:
正则表达式的实现不同,因此这就是行为不同的原因。我不知道 powershell 正则表达式实现的具体细节,所以我不知道确切的原因。

相关内容