PowerShell 2がSelect-String“。* _。* = - 1”でフリーズする


1

これは愚かなQのように見えるかもしれませんが、私は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の正規表現の速度が哀れだということです...


完全なgrepコマンドも見せてください。
bbaja42

私はできたし、私はしました:)
NoSenseEtAl

回答:


1

特定:
に正規表現を微調整してみてください

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

同等のgrepバージョン:

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

一般:
正規表現の実装は異なるため、動作が異なるのはそのためです。 PowerShellの正規表現の実装の詳細がわからないので、正確な理由はわかりません。


正規表現の意味は私の例と同じです(grepとPS)。
NoSenseEtAl

知りません。 2つ以上の正規表現構文としてgrepすることさえできます。通常版、拡張版、およびPerl版。私はPS版では経験していません。
bbaja42

ところでそれはまだフリーズ
NoSenseEtAl

MB単位のサイズなど、データサンプルの詳細を教えてください。
bbaja42

ところでPSがディレクトリを調べようとしているのに、grepが "Xはディレクトリです"とスキップしている可能性があります。
NoSenseEtAl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.