Я ищу регулярное выражение BASH, чтобы вытащить «db» agruments из приведенных ниже команд. Однако порядок аргументов не гарантируется. По какой-то причине я не могу заставить его работать полностью.Regex соответствует концу строки
То, что я до сих пор
regex="--db (.*)($| --)"
[[ [email protected] =~ $regex ]]
DB_NAMES="${BASH_REMATCH[1]}"
# These are example lines
somecommand --db myDB --conf /var/home # should get "myDB"
somecommand --db myDB anotherDB manymoreDB --conf /home # should get "myDB anotherDB manymoreDB"
somecommand --db myDB # should get "myDB"
somecommand --db myDB anotherDB # should get "myDB anotherDB"
Любое предложение на регулярное выражение?
Я не думаю, что bash поддерживает не жадный матч. вы можете попробовать либо '([^ -] *)' вместо '(. *)', либо использовать awk или sed – Fabricator
Почему бы не использовать 'getopt' или' getopts' для синтаксического анализа аргументов командной строки? – nanoix9