Java充电社
专辑
博文
联系我
本人继续续收门徒,亲手指导
Shell专题第11篇:正则表达式入门
相关专辑:
Shell专题
<div style="display:none"></div> 正则表达式使用单个字符串来描述、 匹配一系列符合某个语法规则的字符串。 在很多文本编辑器里, 正则表达式通常被用来检索、 替换那些符合某个模式的文本。 在 Linux 中, grep,sed, awk 等文本处理工具都支持通过正则表达式进行模式匹配。 ## 11.1、常规匹配 例如下面的命,会对/etc/passwd的每行内容进行匹配,将含有root的行输出,如图中红色的部分即为匹配的内容 ```shell [root@test001 ~]# cat /etc/passwd | grep root ``` ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/299/f4ffd6d7-7ae3-4365-aa53-66e8982a4b7f.png) ## 11.2、常用的特殊字符串 ### 1)特殊字符:^ ^匹配一行的开头,如下,会匹配/etc/passwd中以root开头的行 ```shell [root@test001 ~]# cat /etc/passwd | grep ^root ``` ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/299/8310798a-3c76-4c8b-9a63-4d46880d4a43.png) ### 2)特殊字符:$ $匹配一行的结尾,如下,会匹配出/etc/passwd中以bash结尾的行 ```shell [root@test001 ~]# cat /etc/passwd | grep bash$ ``` ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/299/fdb2c3ee-acd4-4f0b-87f5-2f8bb5ccd247.png) ### 3)特殊字符:. .匹配一个任意字符,如下,可以匹配含有四个字符,其中第1个字符是r,第4个字符是t的行,中间两个可以是任意字符 ```shell [root@test001 ~]# cat /etc/passwd | grep r..t ``` ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/299/d5e3ae6c-3312-4e92-bb31-27dbeaf8b1ce.png) ### 4)特殊字符:* *不单独使用,他和上一个字符连用,表示匹配上一个字符0次或多次,如下,可以匹配第1个字符是r,最后1个字符是t,中间可以包含任意数量的o ```shell [root@test001 ~]# cat /etc/passwd | grep ro*t ``` ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/299/58efbf68-8ba2-4eb1-9785-1089e695211f.png) ### 5)字符区间(中括号):[] []表示匹配某个范围内的一个字符,例如 | [6,8] | 匹配6或者8 | | -------- | -------------------------------- | | [0-9] | 匹配1个0-9的数字 | | [0-9]* | 匹配任意长度的数字字符串 | | [a-z] | 匹配1个a-z之间的字符 | | [a-z]* | 匹配任意长度的字母字符串 | | [a-ce-f] | 匹配a-z或者e-f之间的任意一个字符 | ```shell [root@test001 ~]# cat /etc/passwd | grep "[a-z]*" ``` ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/299/aaec8f25-88dc-49d4-afba-67267c7ce29e.png) ### 6)特殊字符:\ \表示转义,并不会单独使用,由于所有特殊字符都有其特定的匹配模式,当我们想匹配某一特殊字符本身时(例如,我想找出所有包含‘$’的行),就会碰到困难,此时我们就要将转义字符和特殊字符连用,来表示特殊字符本身,例如 ```shell [root@test001 ~]# echo "abc$" | grep "\\$" abc$ [root@test001 ~]# echo "abc$" | grep '\$' abc$ ``` ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/299/a7040200-7a47-409c-9cb7-bc11e4705ed4.png) ### 7)扩展的正则表达式 这里说一下,有些语言中支持正则表达式的扩展语法,如`{n,m}`等等,对于这种,使用grep匹配的时候,需要添加`-E`选项,否则无法识别这种语法。 比如下面2行,匹配a-z中的任意字符2或者3次 ```shell [root@test001 ~]# echo "ab,cdre" | grep "[a-z]{2,3}" [root@test001 ~]# echo "ab,cdre" | grep -E "[a-z]{2,3}" ab,cdre ``` ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/299/29736394-89de-4bba-b6c0-c98a7380ea12.png) 关于正则表达式的更多语法,大家可以查阅相关资料学习,这里不做过多说明。 <a style="display:none" target="_blank" href="https://mp.weixin.qq.com/s/_S1DD2JADnXvpexxaBwLLg" style="color:red; font-size:20px; font-weight:bold">继续收门徒,亲手带,月薪 4W 以下的可以来找我</a> ## 最新资料 1. <a href="https://mp.weixin.qq.com/s?__biz=MzkzOTI3Nzc0Mg==&mid=2247484964&idx=2&sn=c81bce2f26015ee0f9632ddc6c67df03&scene=21#wechat_redirect" target="_blank">尚硅谷 Java 学科全套教程(总 207.77GB)</a> 2. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484192&idx=1&sn=505f2faaa4cc911f553850667749bcbb&scene=21#wechat_redirect" target="_blank">2021 最新版 Java 微服务学习线路图 + 视频</a> 3. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484573&idx=1&sn=7f3d83892186c16c57bc0b99f03f1ffd&scene=21#wechat_redirect" target="_blank">阿里技术大佬整理的《Spring 学习笔记.pdf》</a> 4. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484544&idx=2&sn=c1dfe907cfaa5b9ae8e66fc247ccbe84&scene=21#wechat_redirect" target="_blank">阿里大佬的《MySQL 学习笔记高清.pdf》</a> 5. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485167&idx=1&sn=48d75c8e93e748235a3547f34921dfb7&scene=21#wechat_redirect" target="_blank">2021 版 java 高并发常见面试题汇总.pdf</a> 6. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485664&idx=1&sn=435f9f515a8f881642820d7790ad20ce&scene=21#wechat_redirect" target="_blank">Idea 快捷键大全.pdf</a> ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/1/2883e86e-3eff-404a-8943-0066e5e2b454.png)
相关专辑:
Shell专题