передача параметра в регулярное выражение bash
Использую
grep -o '[0-9]\+.[0-9]\+-[^/]\+'
чтобы находить файлы типа 1.2-stable. Сейчас имя файлов изменилось - dev-1.2-stable, это dev передается параметром в скрипт. пробовал
grep -o '$1\+.[0-9]\+.[0-9]\+-[^/]\+'
но не подходит, как правильно прописать параметр в скрипт?
Ответы (2 шт):
В баше (а также в Perl и других родных языках), все, что написано в одинарных кавычках не интерполируется (то есть, значения переменных не подставляется). А что бы они подставлялись, нужно использовать двойные кавычки.
То есть, достаточно написать так
grep -o "$1\+.[0-9]\+.[0-9]\+-[^/]\+"
Ваше регулярное выражение полностью не правильно.
Полагаю, вы хотели написать что-то вроде этого:
bash -c "ls -1 | egrep '$1\\d+\\.\\d+-.*\$'"
Во первых grep без ключа -E поддерживает лишь простые регулярные выражение (BRE), в которые, на сколько я помню, не входят знаки +, указывающие на количество. В BRE надо указывать количество через фигурные скобки {}. В BRE есть квантификаторы +.
В общем, из вопроса не понятны ни входящие данные, ни ожидаемый результат. По вашему регулярному выражению еще более не ясно что вы хотите получить.
Также, вам следует указать что именно вы хотите передавать в параметре. От этого будет зависеть способ помещения параметра внутрь регулярки.