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

438
shome_slice

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

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

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

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

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

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

0

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

0
Spiff

-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]' | tail -n1 | cut -c1-63 

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

Большое спасибо за ответ, и это имеет большой смысл. shome_slice 8 лет назад 0
@shome_slice Если мое решение сработало для вас, вы можете щелкнуть контур галочки рядом с моим ответом, чтобы пометить его как «принятое», чтобы люди знали, что этот вопрос был решен. Spiff 8 лет назад 0

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