过去几天我正在学习正则表达。我曾经用字符类[]来表示只选择小写字母的字母范围。
例如:文件包含如下文字:
$ cat file
.a
.b
.c .d
使用grep命令我尝试使用以下命令匹配(使用点开头)小写字母字符
$ grep '^\.[a-z]' file
这只会匹配字符 。一个 .B 。C 我的问题在这?为什么grep命令在同一行 .c
中与 .d 不匹配我也尝试使用此命令匹配.d:
$ grep '^\.[a-z][a-z]` file
但是这个不起作用你能帮我一个人吗?这两个字符类之间有什么区别
[a-z] vs [a-z][a-z]
答案 0 :(得分:2)
如果您想匹配所有这些内容,请删除^
,然后执行:
grep '\.[a-z]' file
^
表示它必须位于一行的开头。所以你试图匹配一个文字点,然后是a和z范围内的一个字符。哪一个必须在一行的开头。
[a-z]
和[a-z][a-z]
之间的差异因此[a-z]
匹配a-z
范围内的单个字符。做[a-z][a-z]
意味着你要做两次。因此,尝试匹配a-z
范围内的2个连续字符。
<强> Here's a live example of the modified version 强>
我强烈建议您使用regex101.com(上面的示例使用),如果您正在尝试学习正则表达式。因为它给你输入的正则表达式提供了很好的解释。