模式匹配数字在egrep中不起作用?

发布于 2024-09-08 07:41:09 字数 231 浏览 10 评论 0原文

为什么我不能将字符串

"1234567-1234567890"

与给定的正则表达式

\d{7}-\d{10}

与 shell 中的 egrep 进行匹配,如下所示:

egrep \d{7}-\d{10} file

Why can't I match the string

"1234567-1234567890"

with the given regular expression

\d{7}-\d{10}

with egrep from the shell like this:

egrep \d{7}-\d{10} file

?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

无法回应 2024-09-15 07:41:09

egrep 无法识别数字字符类的 \d 简写,因此您需要使用例如 [0-9]

此外,虽然在这种情况下不是绝对必要的,但引用正则表达式以防止 shell 的误解是一个好习惯。因此,类似这样的东西应该有效:

egrep '[0-9]{7}-[0-9]{10}' file

另请参阅

参考文献

egrep doesn't recognize \d shorthand for digit character class, so you need to use e.g. [0-9].

Moreover, while it's not absolutely necessary in this case, it's good habit to quote the regex to prevent misinterpretation by the shell. Thus, something like this should work:

egrep '[0-9]{7}-[0-9]{10}' file

See also

References

时常饿 2024-09-15 07:41:09

为了完整起见:

Egrep 实际上支持字符类。这些类是:

  • [:alnum:]
  • [:alpha:]
  • [:cntrl:]
  • [:digit:
  • ] [:graph:]
  • [:lower:]
  • [:print:]
  • [:punct:]
  • [:space:]
  • [ :upper:]
  • [:xdigit:]

示例(注意双括号):

egrep '[[:digit:]]{7}-[[:digit:]]{10}' file

For completeness:

Egrep does in fact have support for character classes. The classes are:

  • [:alnum:]
  • [:alpha:]
  • [:cntrl:]
  • [:digit:]
  • [:graph:]
  • [:lower:]
  • [:print:]
  • [:punct:]
  • [:space:]
  • [:upper:]
  • [:xdigit:]

Example (note the double brackets):

egrep '[[:digit:]]{7}-[[:digit:]]{10}' file
无风消散 2024-09-15 07:41:09

如果您向 grep 传递“perl regex”选项,则可以使用 \d,例如:

grep -P "\d{9}"

you can use \d if you pass grep the "perl regex" option, ex:

grep -P "\d{9}"

弃爱 2024-09-15 07:41:09

使用 [0-9] 代替 \d。 egrep 不知道 \d。

Use [0-9] instead of \d. egrep doesn't know \d.

柠栀 2024-09-15 07:41:09

试试这个:

egrep '(\d{7}-\d{10})' file

try this one:

egrep '(\d{7}-\d{10})' file
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文