如何用grep正则精确匹配带foo前缀目录下的db.yml路径
正则错误原因
你使用的.*规则会匹配包含路径分隔符/的任意字符,无法限制foo前缀目录与db.yml之间没有其他子目录,只要路径以config/foo开头、db.yml结尾就会被匹配,因此会命中嵌套子目录下的db.yml文件。
修改方案
将.*替换为匹配非/字符的规则[^/]*,修改后的命令如下:grep -Eo "^config/foo[^/]*/db.yml"
规则说明
[^/]表示匹配所有不是路径分隔符/的字符,[^/]*即匹配foo目录名前缀之后、下一个/之前的全部内容,刚好完整匹配foo前缀的目录名- 该规则严格限制
db.yml必须直接存放在foo前缀的一级子目录下,不会匹配存在嵌套子目录的路径
匹配效果验证
对你给出的示例路径匹配结果如下:
- 匹配通过:
config/footestto/db.yml、config/foodummy/db.yml - 匹配不通过:
config/footestto/prod/db.yml(foo前缀目录与db.yml之间存在/prod/层级,不符合规则)
内容的提问来源于stack exchange,提问作者Aziz
相关产品推荐
相关产品推荐

