按扩展程序

时间:2017-01-12 11:48:36

标签: regex git bash shell

我有一个像*.{jpg,png}这样的字符串,但字符串也可能只是*.scss - 实际上它是editorconfig

然后我想搜索我的git存储库跟踪的这个扩展名的每个文件。

我尝试了几种方法,但没有找到足够的解决方案。

我最接近的是: git ls-tree -r master --name-only | grep -E ".*\.jpg"

但这仅适用于单个文件扩展名,而不适用于此类git ls-tree -r master --name-only | grep -E ".*\.{jpg,png}"

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:9)

试试这个:

git ls-tree -r master --name-only | grep -E '.*\.(jpg|png)'

您尝试通过-E选项传递的表达式被解释为任何字符(.*),点(\.)和字符串{jpg,png}。我想您在正则表达式Bash brace expansion(括号内)中将alternationgroup|)混淆。

考虑使用行尾锚点:'.*\.(jpg|png)$'

没有grep

@ 0andriy 指出你可以将模式传递给git ls-files,如下所示:

git ls-files '*.jpg' '*.png'

注意,您应该转义参数以防止filename expansion(globbing)。特别是asterisk (*) character

  

匹配前面的字符串或RE的任意数量的重复,包括零实例。

但这显然只适用于简单的git patterns。对于稍微复杂的情况,例如"扩展匹配来自给定集合的 N 字符"你需要一个正则表达式(例如 grep )。