2013-08-05 3 views
2

Я хочу сохранить некоторое время выполнения моего кода. Таким образом, вместо того, чтобы применять Grep на отдельном файле (с помощью Еогеасп), я хочу использовать Grep всех файлов в массиве одновременноКак использовать команду grep для нескольких файлов одновременно?

Я использую:

`grep -Pi "search string" $files` 

, но это не дает мне желаемого результата, потому что строка поиска находится в двойных кавычках («...»), а полная команда - в обратных тактах.

Здесь $files содержит путь всех файлов, разделенных одним пробелом и search string имеет регулярное выражение, как ^\\s*abc|bcd|efg\\s+...

ответ

6

Сделайте себе одолжение и установить ack. После этого вы редко будете использовать grep. ack:

  • автоматически рекурсивно в подкаталогах

  • трактует параметр поиска как регулярное выражение Perl

  • богатый набор параметров командной строки, более мощный и DWIMmy чем grep

Установите, установив дистрибутив App::Ack от CPAN

+0

спасибо, но строка поиска имеет регулярное выражение в ней, делает Ack заботиться о регулярном выражении тоже? я новичок в perl Мне нужно найти что-то вроде «^ \\ s * abc | bcd | efg \\ s + ... – user2654017

+0

Да, ack поддерживает регулярные выражения. Он написан на чистом Perl. http: // beyondgrep.com/ –

0

что-то, как это должно работать

$s1='search string'; 

@x = qx(grep -Pi "$s1" $files); 
Смежные вопросы