正则表达式匹配行尾
发布时间:2020-12-14 05:37:35 所属栏目:百科 来源:网络整理
导读:我正在寻找BASH正则表达式从下面的命令中拉出’db’agruments.但是,不保证参数的顺序.出于某种原因,我无法让它完全发挥作用. 到目前为止我有什么 regex="--db (.*)($| --)"[[ $@ =~ $regex ]]DB_NAMES="${BASH_REMATCH[1]}"# These are example linessomecom
我正在寻找BASH正则表达式从下面的命令中拉出’db’agruments.但是,不保证参数的顺序.出于某种原因,我无法让它完全发挥作用.
到目前为止我有什么 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使用的是一种不包含非贪婪重复运算符(*?,?)的正则表达式.因为*是贪婪的并且没有办法告诉它不贪婪,所以第一个带括号的子表达式((.*))匹配到行尾的所有内容.
如果您知道要捕获的值不包含特定字符并替换,则可以解决此问题.使用排除该字符的字符类. 例如,如果–db之后的值不包含破折号( – ),则可以使用此正则表达式: regex='--db ([^-]*)($| --)' 它匹配问题中发布的所有示例. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |