更新时间:2022年04月25日14时06分 来源:传智教育 浏览次数:
POSIX规范制订了两种标准的正则表达式语法,一种是基本正则表达式,一种扩展正则表达式。这两中正则表达式的元字符组成略有不同。本节来学习基础正则表达式元字符。
基础正则表达式元字符
符号“*”用于匹配前导字符0次或多次,具体示例如下:
hel*o
以上示例中“*”符号之前是普通字符l,“*”符号就表示匹配l字符0次或多次,字符串helo、hello、hellllllo都可以与hel*o匹配。
符号“.”用来匹配任意除换行符“\n”外任意的单个字符。当正则表达式中出现“.”符号时,意味着该位置应有一个字符,具体示例如下:
..U73.
“.”只能匹配一个字符,因此上述字符串表示前两个字符是任意字符,第3~5个字符是U73,最后一个字符也是任意字符。字符串MHU73、4JU73H等都可与..U73.匹配。
符号“^”用来匹配行首字符,表示行首字符是“^”后面那个字符。例如列举出/etc目录下以字符串“sys”开头的文件,可以使用如下命令:
[itheima@localhost ~]$ ls /etc | grep "^sys" sysconfig sysctl.conf sysctl.d systemd system-release system-release-cpe
注意:
尽管以上示例匹配的是以字符串“sys”开头的内容,但读者应理解为匹配以字符“s”开头,第二、第三个字符依次为“y”和“s”的行,这种理解方式更符合正则表达式的思维,。这种思维在学习正则表达式时非常重要,读者应熟练掌握。
行尾定位符“$”用来匹配文本行末尾的字符,与“^”符号的作用正相反。例如查找/etc目录下以conf结尾的文件,可以使用如下命令。
[itheima@localhost ~]$ ls /etc | grep cof$ asound.conf autofs.conf autofs_ldap_auth.conf brltty.conf cgconfig.conf cgrules.conf cgsnapshot_blacklist.conf ......
同样,读者在理解行尾定位符的时候也应该从字符的角度去理解,即“conf$”匹配的是以“conf”以字符“f”结尾,同时倒数第2~4个字符依次为“n”、“o”、“c”的文本行。
“[]”符号的功能比较特殊,它是用来指定一个字符集合的,其基本语法如下:
[abc]
其中a、b和c表示任意单个字符,只要某个字符串在方括号所在的位置出现了方括号中的任意一个字符,就能满足匹配规则。
另外,对于连续的数字或字母可以使用符号“-”来表示一个范围,例如[a-z],表示匹配到a到z中的任意一个字母。下面通过查看/etc目录下以rc开头,并且rc后面紧跟一个数字的文件有哪些来演示“[]”符号的使用,查看的命令具体如下所示:
[itheima@localhost ~]$ls /etc | grep "^rc[0-9]" rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d
由输出结果可知,符合规则的文件一共有7个。
注意:元字符“*”或“.”位于“[]”符号之中,便仅表示一个普通的字符,不再具有特殊意义。
“[^]”表示不匹配其中列出的任意字符,其语法格式如下所示。
[^abc]
它的用法与“[]”符号相反,此处不再赘述。