如何在 MINGW64 的 grep 中使用方括号?

How to use square brackets in grep for MINGW64?

目前,我有以下正则表达式。它应该匹配我正在回应的字符串:

echo "TBGFSGFI22800_D_REP_D_RISIKOEINHEIT" | grep -E 'TBGFSGFI\d\d\d\d\d[A-Za-z_]{1,100}' 

它在我的 Mac 和 Notepad++ 中的 OsX 中按预期工作,但在 Bash for windows (MINGW64) 中我得到一个空字符串。我如何使用带标志的 grep,或者我应该如何重写正则表达式以匹配模式?

我的 grep 版本是 3.1。 Bash:4.4.23(1)

提前感谢您的帮助!

您正在使用带有 -E 选项的 POSIX ERE 正则表达式,并且该风格不支持 \d 结构。您还需要 -o 选项来实际提取匹配项。

注意你不需要重复\d五次,你可以使用范围量词,\d{5}.

您可以使用

echo "TBGFSGFI22800_D_REP_D_RISIKOEINHEIT" | grep -Po "TBGFSGFI\d{5}[A-Za-z_]{1,100}" 

在哪里

  • -P 表示正则表达式具有 PCRE 风格
  • -o 仅提取匹配项
  • TBGFSGFI\d{5}[A-Za-z_]{1,100} - 匹配 TBGFSGFI 的正则表达式,然后是任意五位数字,然后是 1-100 个 ASCII 字母或 _.