【问题标题】:How to use square brackets in grep for MINGW64?如何在 grep 中为 MINGW64 使用方括号?
【发布时间】:2021-04-20 10:12:59
【问题描述】:

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

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

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

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

提前感谢您的帮助!

【问题讨论】:

  • \d 实际上不是有效的 POSIX ERE 构造,请使用 -P 而不是 -E
  • 谢谢,下面的作品:echo "TBGFSGFI22800_D_REP_D_RISIKOEINHEIT" | grep -Poz 'TBGFSGFI\d\d\d\d\d[A-Za-z_]{1,100}'
  • @WiktorStribiżew 你能回答问题而不是评论吗?我会将其标记为答案:)
  • 我发布了答案。

标签: regex windows bash grep mingw-w64


【解决方案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 字母或 _

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2017-01-17
    • 2016-07-16
    • 2020-07-17
    相关资源
    最近更新 更多