为什么这种模式在egrep中不起作用?
为什么我不能匹配string
"1234567-1234567890"
与给定的正则expression式
\d{7}-\d{10}
与壳egrep
像这样:
egrep \d{7}-\d{10} file
?
egrep
不识别数字字符类的简写,所以你需要使用eg [0-9]
。
而且,虽然在这种情况下并不是绝对必要的,但引用正则expression式以避免shell的误解是个好习惯。 因此,这样的事情应该工作:
egrep '[0-9]{7}-[0-9]{10}' file
也可以看看
-
egrep
迷你教程
参考
- regular-expressions.info/Flavor比较
- GNU
grep
,ed
,sed
,egrep
,awk
,emacs
注释- 列出
grep
vsegrep
与其他正则expression式之间的区别
- 列出
- GNU
为了完整性:
Egrep其实是支持angular色类的。 这些课程是:
- [:alnum:]
- [:α:]
- [:CNTRL:]
- [:数字:]
- [:graphics:]
- [:降低:]
- [:打印:]
- [:PUNCT:]
- [:空间:]
- [:上:]
- [:xdigit:]
示例(注意双括号):
egrep '[[:digit:]]{7}-[[:digit:]]{10}' file
使用[0-9]而不是\ d。 egrep不知道\ d。
你可以使用\d
如果你通过grep“perl regex”选项,例如:
grep -P "\d{9}"
试试这个:
egrep '(\d{7}-\d{10})' file