передача параметра в регулярное выражение bash

Использую

grep -o '[0-9]\+.[0-9]\+-[^/]\+' 

чтобы находить файлы типа 1.2-stable. Сейчас имя файлов изменилось - dev-1.2-stable, это dev передается параметром в скрипт. пробовал

grep -o '$1\+.[0-9]\+.[0-9]\+-[^/]\+'

но не подходит, как правильно прописать параметр в скрипт?


Ответы (2 шт):

Автор решения: KoVadim

В баше (а также в Perl и других родных языках), все, что написано в одинарных кавычках не интерполируется (то есть, значения переменных не подставляется). А что бы они подставлялись, нужно использовать двойные кавычки.

То есть, достаточно написать так

grep -o "$1\+.[0-9]\+.[0-9]\+-[^/]\+"
→ Ссылка
Автор решения: DiD

Ваше регулярное выражение полностью не правильно.

Полагаю, вы хотели написать что-то вроде этого:

bash -c "ls -1 | egrep '$1\\d+\\.\\d+-.*\$'"

Во первых grep без ключа -E поддерживает лишь простые регулярные выражение (BRE), в которые, на сколько я помню, не входят знаки +, указывающие на количество. В BRE надо указывать количество через фигурные скобки {}. В BRE есть квантификаторы +.

В общем, из вопроса не понятны ни входящие данные, ни ожидаемый результат. По вашему регулярному выражению еще более не ясно что вы хотите получить.

Также, вам следует указать что именно вы хотите передавать в параметре. От этого будет зависеть способ помещения параметра внутрь регулярки.

→ Ссылка