Есть ли в Mac OS X команда, которая может выполнять поиск по регулярным регулярным выражениям?

4398
Dan Tao

Я хочу сделать простой регулярный поиск по каталогу, который не ограничен одной строкой.

Я попробовал grep и ack, но ни один из них не поддерживает это.

Я знаю, что это не должно быть слишком вычислительно дорого (в моем случае), потому что мой текстовый редактор по выбору ( Sublime Text ) может сделать это просто отлично.

Я просто ищу эту версию командной строки. Google включил pcregrep, но я не могу найти это для Mac. Я просто не смотрю в нужном месте?

11
Дать пример того, что вы ищете, было бы полезно. И помогает ли `grep` с контекстом найти то, что вы хотите (` -C1`)? mbb 13 лет назад 1

3 ответа на вопрос

12
Tobia

Установите Homebrew и затем:

brew install pcre 

Это даст вам последнюю pcregrep

1
Kusalananda

Вы не сказали точно, что вы ищете, поэтому я представлю задачу выяснить, содержит ли файл 112, а затем 223, не обращая внимания на переводы строки.

Немного придуманное awkрешение:

awk -vRS='' '/112.*223/ { print "found it"; exit }' file.in 

RSПеременная содержит разделитель записей. Если установить пустую строку, весь файл будет считан как одна запись.

Это, вероятно, будет очень неэффективно для больших файлов.

Кстати, я делаю это на OpenBSD, но OS X awk должен работать так же.

Я на OS X 10.11.2 и получаю "awk: invalid -v option" HaggleLad 8 лет назад 0
в OS X вам нужен пробел между `v` и` RS`. то есть `awk -v RS = '' '/112.*223/ 'file.in` Neil 6 лет назад 0
0
Jim DeLaHunt

«pcregrep» может относиться к более старой pcregrepи более новой стабильным версиям pcre2grep. Оба предоставлены проектом PCRE вpcre.org .

Mac Ports предоставляет первый как часть порта pcre(стабильный в версии 8.40), а второй как часть порта pcre2(в настоящее время версия 10.22). Установить через:

% sudo port install pcre2