在bash中学习正则表达式,我试图获取以.com
最初我做了:
cat patternNpara.txt | egrep "^[[:alnum:]]+(.com)$"
为什么: +
匹配一个或多个匹配项,因此将其置于alnum
之后应该获取任何数字,字或符号的出现,但显然,此逻辑失败....
然后我这样做了:( 纯粹的尝试,而不是真正应用任何逻辑...... )并且它有效
cat patternNpara.txt | egrep "^[[:alnum:]].+(.com)$"
让我感到困惑: .
仅匹配单次出现,那么,我如何得到输出...我的意思是它如何真正匹配模式???
问题:上述匹配中[[:alnum:]]+
与[[:alnum:]].+
之间的区别(此中有.
)模式及其工作方式???
PS: 我正在寻找可能的解释......不,以这种方式尝试事情......:)
文件patternNpara.txt
的一些测试行,它们被作为输出获取!
valid email = abc@abc.com
invalid email = ab@abccom
another invalid = abc@.com
1 : abc,s,11@gmail.com
2: abc.s.11@gmail.com
答案 0 :(得分:1)
查看您的屏幕截图,您似乎正在尝试匹配具有@
字符的电子邮件地址,这也不包含在您的正则表达式中。你可以使用这个正则表达式:
egrep "[@[:alnum:]]+(\.com)" patternNpara.txt
2个正则表达式之间的差异:
[[:alnum:]]
仅匹配[a-zA-Z0-9]
。如果您有@
或,
,那么您还需要将它们包含在角色类中。答案 1 :(得分:1)
如果您想匹配任何以'.com'结尾的行,您应该使用
egrep ".*\.com$" file.txt
匹配以下所有行
valid email = abc@abc.com
invalid email = ab@abccom
another invalid = abc@.com
1 : abc,s,11@gmail.com
2: abc.s.11@gmail.com
^[[:alnum:]].+(.com)$
可行,但^[[:alnum:]]+(.com)$
不会。原因如下:
^[[:alnum:]].+(.com)$
表示匹配以a-zA-Z
或0-9
开头的字符串,流动两个或更多个字符,并以'com'结尾(不是'.com')。 ^[[:alnum:]]+(.com)$
表示匹配以一个或多个a-zA-Z
或0-9
开头的字符串,流动一个可能是任何内容的字符,并以'com'结尾(不是'.com “)。答案 2 :(得分:0)