我正在寻找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"
关于正则表达式有什么建议吗?
的问题是,bash
使用的香料regex
不包括非贪婪重复操作符(*?
,+?
)。因为*
是贪婪的,并且无法告诉它不要贪婪,所以第一个带括号的子表达式((.*)
)会匹配所有内容,直到行尾。
如果您知道要捕获的值不包含某个字符并替换.
为排除该字符的字符类,则可以解决此问题。
例如,如果之后的值--db
不包含破折号(-
),则可以使用以下命令regex
:
regex='--db ([^-]*)($| --)'
它与问题中张贴的所有示例匹配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句