Как я могу быстро найти первую строку файла, который соответствует regex?

Вот моя работа: https://codepen.io/anon/pen/ZVNpQE

Я смог это исправить, добавив (см. Ниже) к вашему значку:

float: left

5
задан lamcro 11 October 2011 в 15:48
поделиться

7 ответов

В современной реализации Perl код regexp должен быть настолько же быстрым как в grep, но если Вы обеспокоены производительностью, почему Вы просто не испытываете его? С точки зрения чистоты и устойчивости кода, называя внешний инструмент командной строки определенно не хорошо.

9
ответ дан 18 December 2019 в 05:50
поделиться

Это зависит.

  • рабочий внутренний Perl сохраняет Вас время запуска процесса и другие затраты связанного ресурса.
  • grep, вероятно, быстрее, чем выполнение того же задания в Perl, но не чрезвычайно так.

Я сказал бы, чтобы сделать это в Perl, если производительность не вынуждает Вас оптимизировать.

3
ответ дан 18 December 2019 в 05:50
поделиться

Одна вещь остерегаться с grep: В недавних дистрибутивах Linux, если Ваша переменная среды ЛЕНГА определяет тип UTF-8 (например, моя LANG=en_GB.UTF-8), затем grep, sed, вид и вероятно набор других относящихся к обработке текстов утилит, выполняемых приблизительно в 10 раз более медленно. Поэтому не упустите это при выполнении сравнений производительности. Я искажаю свою команду grep теперь к:

LANG= LANGUAGE= /bin/grep

Править: На самом деле это больше похоже в 100 раз более медленно

5
ответ дан 18 December 2019 в 05:50
поделиться

Вы не должны open файл явно.

my $regex = qr/blah/;
while (<>) {
  if (/$regex/) {
    print;
    exit;
  }
}
print "Not found\n";

Так как Вы кажетесь соответствующими о производительности, я позволяю соответствию и print используйте значение по умолчанию $_ если, не присваиваясь <> к чему-либо, которое незначительно быстрее. В нормальном производственном коде,

while (my $line = <>) {
  if ($line =~ /$regex/) {
    print $line;
    exit;
  }
}

был бы предпочтен.

Править: Это предполагает, что файл для проверки дан на командной строке, которая я просто заметил, что Вы не заявили, применяется в Вашем случае.

6
ответ дан 18 December 2019 в 05:50
поделиться

Это зависит. Если Вы хотите оптимизировать в течение времени разработки,

$line = `grep '$regex' file | head -n 1`;

ясно нужно.

Но это прибывает за счет необходимости запустить внешние процессы, в зависимости от вещей помимо жемчуга, устанавливаемого, и теряющий возможность сделать подробное сообщение об ошибке, когда что-то идет не так, как надо.

3
ответ дан 18 December 2019 в 05:50
поделиться

Я однажды сделал сценарий для поиска некоторых регулярных выражений через некоторые большие текстовые файлы (приблизительно 10 МБ каждый). Я сделал это с Perl regexes и заметил, что это вполне не торопилось. Таким образом, я пытался выполнить grep из сценария, и повышение скорости было завершено значительное. Так, в моем собственном опыте Perl встроенные regexes медленнее, чем grep. Но Вы, вероятно, только заметите его с большими файлами. Мой совет: попробуйте его оба пути и посмотрите, как это идет.

1
ответ дан 18 December 2019 в 05:50
поделиться
sed '/pattern/q' file
2
ответ дан 18 December 2019 в 05:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: