Проблема с использованием grep внутри скрипта bash, который запускается удаленно на сервере - PullRequest
1 голос
/ 07 ноября 2019

Я использую скрипт, который запускается удаленно на сервере через ssh. Внутри скрипта я использую эту строку снизу:

ls | grep -oP "\d{4} -\d{2}-\d{2}"

На моей локальной машине, на которой работает Ubuntu, скрипт работает нормально. Но когда я попытался запустить его удаленно, я получил это

grep: invalid option -- 'P'
BusyBox v1.24.1 multi-call binary.
Usage: grep [-HhnlLoqvsriwFE] [-m N] [-A/B/C N] PATTERN/-e PATTERN/...-f file [FILE]...

Первое, что я подумал, это проблема с псевдонимом, я попытался

type grep

Вывод: grep is /bin/grep Я думаю этовсе в порядке.

Меня беспокоит BusyBox (я не знаю, что это такое), но я думаю, что это может быть проблемой?

1 Ответ

1 голос
/ 07 ноября 2019

Вы можете использовать [0-9] / [[:digit:]] вместо \d с POSIX BRE (без опции) или ERE (-E опция):

grep -o "[0-9]\{4\} -[0-9]\{2\}-[0-9]\{2\}"
grep -oE "[0-9]{4} -[0-9]{2}-[0-9]{2}"

Обратите внимание, что в первой команде вынеобходимо избегать скобок, поскольку неоткрытые { и } соответствуют буквальным символам скобок в регулярном выражении POSIX BRE. При выходе они означают диапазон ( интервал , ограничивающий ) квантификаторы. А во второй команде POSIX ERE активируется с помощью -E, и поведение является обратным: когда скобки экранированы, они являются буквальными символами, иначе они являются квантификаторами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...