regex - 按扩展名在 git 存储库中搜索文件

标签 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}".

谁能帮帮我?

最佳答案

试试这个:

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

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

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

没有grep

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

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

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

matches any number of repeats of the character string or RE preceding it, including zero instances.

但这显然只适用于简单的 git patterns .对于稍微复杂的情况,例如“从给定集中匹配 N 个字符的扩展名”,您将需要一个正则表达式(例如 grep)。

关于regex - 按扩展名在 git 存储库中搜索文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41612469/

相关文章:

linux - 使用 ?用 sed

ruby - 使用正则表达式解析日期格式

regex - 如何从 linux 中的文件的每一行中删除与模式匹配的重复单词

Git 日志在控制台上不显示任何内容

git - 如何从 Github 安装 MegaFuse?在 Ubuntu 上

git - 将源代码文件的 Git 存储库从 ISO-8859-1 编码切换为 UTF-8 编码

linux - 使用 grep 查找/剪切功能而不是源代码在 bash 中加载配置文件

bash - 以 ./script.sh 和 . ./脚本.sh

php - 将正则表达式存储在 MySQL 数据库表中并对其进行处理

PHP 正则表达式帮助