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"      }

медленно показывает имена файлов ... Я думаю, проблема в том, что скорость Regex в PS жалкая ...

1 ответ1

1

Конкретный:
Попробуйте настроить регулярное выражение для

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

эквивалентная версия grep:

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

Генеральный:
Реализации регулярного выражения различны, так что это причина для различного поведения. Я не знаю особенностей реализации регулярных выражений powershell, поэтому не знаю точной причины.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .