【问题标题】:How does one use REGEX in --grep in GIT reflog?如何在 GIT reflog 中的 --grep 中使用 REGEX?
【发布时间】:2019-09-24 12:57:36
【问题描述】:

假设我正在尝试查找以某些指定分支名称(Feature-123Feature-126Feature-159)为前缀的任何提交的提交引用。为什么下面的 GIT 命令不起作用?

GIT reflog --grep 'Feature-1(59|2(3|6))'

但是没有 REGEX,这 3 个单独的命令可以正常工作(返回结果)。

GIT reflog --grep 'Feature-123'
GIT reflog --grep 'Feature-126'
GIT reflog --grep 'Feature-159'

--grep 在这种情况下是否不支持 REGEX,尽管它代表全局正则表达式打印?

【问题讨论】:

  • git reflog --grep 'Feature-1\(23\|26\|59\)'
  • @EncryptedWatermelon 啊,你明白了!将其发布为答案,我会接受。在 GREP 中是否必须像这样对所有 REGEX 语法进行转义?
  • 在 git grep 中,您需要转义特殊字符。如果你用普通的 grep 来做,它们就没有必要了。 git reflog | grep -E 'Feature-1(23|26|59)'-E 告诉 grep 这是一个正则表达式。
  • @EncryptedWatermelon 这样在grep 之前使用-E| 而没有-- 一开始让我有点吃惊。我猜它会将reflog 的输出通过管道传输到grep,而不是作为同一命令的一部分。
  • 没错。 reflog 的输出通过管道传送到 grep 命令中。

标签: regex git grep


【解决方案1】:

您需要转义特殊字符。

git reflog --grep 'Feature-1\(23\|26\|59\)'

【讨论】:

  • 这不是 转义,而是不同的语法。这是Basic vs Extended Regular Expressionsgit grepgrep 一样,默认使用基本语法。它可以使用git grep -E 更改为扩展语法,使用-F 更改为固定字符串,使用-P 更改为perl-like。
【解决方案2】:

我确认您在使用 git grep -E (--extended-regexp, POSIX extended regexp for patterns)-P (--perl-regexp, Perl-compatible regular expressions for patterns) 时不需要转义 ( 和 |

但是,如果您要使用 -P,请确保使用 Git 2.35(2022 年第一季度)。

当模式仅包含 ASCII 字母时,

"git grep --perl-regexp"(man) 无法将 UTF-8 字符与通配符匹配,这已在 Git 2.35(2022 年第一季度)中得到纠正。

您的目标字符串中没有特殊的 UTF-8 字符,但其他字符可能。

参见René Scharfe (rscharfe)commit 32e3e8bcommit dc2c44f(2021 年 12 月 18 日)。
(由 Junio C Hamano -- gitster -- 合并到 commit c91b0b7,2022 年 1 月 5 日)

grep/pcre2: 使用 PCRE2_UTF 即使是 ASCII 模式

原始补丁作者:Hamza Mahfooz
签名者:René Scharfe

compile_pcre2_pattern() 当前仅将选项 PCRE2_UTF 用于非 ASCII 字符的模式。
不过,带有 ASCII 通配符的模式可以匹配非 ASCII 字符串。
如果没有该选项,PCRE2 会错误处理 UTF-8 输入,但它会匹配部分多字节字符。
通过使用 PCRE2_UTF 来解决这个问题,即使是仅 ASCII 模式。

这是对已还原的ae39ba4 的翻版(“grep/pcre2:修复有关 ascii 模式和 UTF-8 数据的边缘情况”,2021-10-15,Git v2.34.0-rc1 -- merge )。

【讨论】:

    猜你喜欢
    • 2017-07-17
    • 2020-08-16
    • 1970-01-01
    • 2021-09-10
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    相关资源
    最近更新 更多