为什么我不能匹配这个字符串
"1234567-1234567890"
使用给定的正则表达式
\d{7}-\d{10}
使用Shell中的egrep
,可以这样做:
egrep \d{7}-\d{10} file
抱歉,我只能处理英文语言的任务。为什么我不能匹配这个字符串
"1234567-1234567890"
使用给定的正则表达式
\d{7}-\d{10}
使用Shell中的egrep
,可以这样做:
egrep \d{7}-\d{10} file
抱歉,我只能处理英文语言的任务。egrep
不能识别\d
作为数字字符类的简写,所以你需要使用例如[0-9]
。
此外,在这种情况下虽然不是绝对必要的,但最好引用正则表达式,以防止Shell误解。因此,像这样做应该可以:
egrep '[0-9]{7}-[0-9]{10}' file
grep
、ed
、sed
、egrep
、awk
、emacs
正则表达式差异说明
grep
与 egrep
以及其他正则表达式语法之间的差异\d
、\s
、\w
、\b
等。此外,\d
并不是前缀;它是许多但不是所有类型都支持的数字字符类的简写。 - polygenelubricants\d
,但可以使用其扩展形式[0-9]
,它们实际上是相同的,只是稍微长一些。在某些支持Unicode的版本中,\d
与[0-9]
不同,因为它还包括其他一些Unicode数字字符。 - polygenelubricants[0-9]
,当我真正需要的是[[:digit:]]
。此外,这些字符类几乎被所有地方支持,并且在POSIX中定义。 - J. M. Becker为了完整性:
Egrep实际上支持字符类。这些类别是:
示例(注意双括号):
egrep '[[:digit:]]{7}-[[:digit:]]{10}' file
[[:digit:]]
在所有可能的情况下都不如[[0-9]]
好。这两者都不是简写,而且比默认的正则表达式语法更难记。例如:[[:lower:]]
比[a-z]
更难记、读和写。 - Zombiesgrep -E
,即egrep
支持[:digit:]
和[0-9]
,所以哪里有抱怨?如果你正在与\d
进行比较,那么这是可以争论的。d可以代表任何东西,就像一个字母变量名。似乎\d
已经变得更加流行。我认为grep字符类比Perl\d
更早。 - Jason S如果使用“perl正则表达式”选项,你可以使用\d
来进行匹配,例如:
grep -P "\d{9}"
grep -P
。 - Ken J使用[0-9]代替\d。例如,egrep不认识\d。
试试这个:
egrep '(\d{7}-\d{10})' file