我正在寻找 BASH 正则表达式来从以下命令中提取“db”参数。但是,不能保证参数的顺序。出于某种原因,我无法让它完全工作。
到目前为止我所拥有的
regex="--db (.*)($| --)"
[[ $@ =~ $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"
Run Code Online (Sandbox Code Playgroud)
关于正则表达式的任何建议?
问题是bash使用了一种regex不包括非贪婪重复运算符 ( *?, +?)的风格。因为*is greedy 并且没有办法告诉它不贪婪,所以第一个带括号的子表达式 ( (.*)) 匹配到行尾的所有内容。
如果您知道要捕获的值不包含特定字符并替换.为排除该字符的字符类,则可以解决此问题。
例如,如果后面的值--db不包含破折号 ( -),您可以使用以下命令regex:
regex='--db ([^-]*)($| --)'
Run Code Online (Sandbox Code Playgroud)
它匹配问题中发布的所有示例。
| 归档时间: |
|
| 查看次数: |
7377 次 |
| 最近记录: |