模式匹配数字在egrep中不起作用?
为什么我不能将字符串
"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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
egrep
无法识别数字字符类的\d
简写,因此您需要使用例如[0-9]
。此外,虽然在这种情况下不是绝对必要的,但引用正则表达式以防止 shell 的误解是一个好习惯。因此,类似这样的东西应该有效:
另请参阅
egrep
迷你教程参考文献
grep
的风味注释,ed
、sed
、egrep
、awk
、emacs
grep
与egrep
与其他正则表达式风格之间的差异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:
See also
egrep
mini tutorialReferences
grep
,ed
,sed
,egrep
,awk
,emacs
grep
vsegrep
vs other regex flavors为了完整起见:
Egrep 实际上支持字符类。这些类是:
示例(注意双括号):
For completeness:
Egrep does in fact have support for character classes. The classes are:
Example (note the double brackets):
如果您向 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}"
使用 [0-9] 代替 \d。 egrep 不知道 \d。
Use [0-9] instead of \d. egrep doesn't know \d.
试试这个:
try this one: