Использование специальных флагов grep из версии общих команд BSD на Mac

Поэтому я использовал команду, переданную через curl (в утилите grep GNU/Linux), чтобы сгенерировать случайную строку пароля для усиления безопасности некоторых моих учетных записей.

curl -s https://www.grc.com/passwords.htm | grep -oP '[a-zA-Z0-9]{63}' | tail -n1 | cut -c1-63

Я пытаюсь заставить эту команду работать на Mac, и вижу, что у Mac есть общие утилиты BSD, являющиеся основой Unix, флаги разные. Я ссылался на справочную страницу grep для утилиты общих команд BSD и наткнулся на несколько флагов, которые, как оказалось, будут работать, но я не могу заставить его правильно проанализировать страницу. Если кто-то может указать мне правильное направление или сообщить, что мне не хватает, я был бы признателен.

Я чувствую, что это прямо перед моим лицом.

-e Флаг казался праведным, но он тоже не работает.

-e pattern, --regexp=pattern Укажите шаблон, используемый при поиске входных данных: строка ввода выбирается, если она соответствует любому из указанных шаблонов. Этот параметр наиболее полезен, когда несколько опций -e используются для указания нескольких шаблонов или когда шаблон начинается с тире ('-').

1 ответ

Решение

-o (печатать только совпадающую часть строки) одинаково как для BSD, так и для GNU grep.
-P (используйте Perl-совместимые регулярные выражения, иначе "PCRE") специфично для GNU grep.

К счастью, ваше примерное регулярное выражение не использует специфичный для PCRE синтаксис. Но он также не соответствует классическому синтаксису Unix RE. Требуются "расширенные" регулярные выражения (ERE). Вы можете получить это на grep BSD, добавив -E или по телефону egrep вместо grep,

curl -s https://www.grc.com/passwords.htm | grep -oE '[a-zA-Z0-9]{63}' | tail -n1 | cut -c1-63

Если у вас есть другие RE, которые действительно требуют PCRE, вы всегда можете установить GNU grep (и, если хотите, подавляющее большинство любых других ваших любимых пакетов программного обеспечения с открытым исходным кодом) через менеджеры пакетов, такие как Homebrew, MacPorts или Fink.

Другие вопросы по тегам