这可能看起来像一个愚蠢的问题,但我有 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 正则表达式实现的具体细节,所以我不知道确切的原因。