本文共 1485 字,大约阅读时间需要 4 分钟。
正则介绍_grep
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/3a25558d1a61def634a7f90e12257ceb.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 正则就是一串有规律的字符串,包含特殊符号。
- 对以后的写shell脚本很大的帮助。可以实现很多复杂的需求。
第一个工具 grep
- grep 用来过滤关键词。
- -c 行数,过滤出来的这些行有多少行。
- 做实验,先把etc/passwd 作为一个样本文件 cp 到 创建的grep目录下。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/7940972a6d6098192b96851b9c575f76.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 然后 用grep 过滤 nologin grep有一个好处,在过滤关键词的时候,会自动对关键词上颜色。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/c354e700f20b7bd5e17babd0d6e308b3.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/5d1aea53da04531bef9983b6ffd4853e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 然后用-c 选项 可以显示刚才过滤的 有多少行。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/e9e2f391ed4922e64b5ab3085bdd1062.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- -n选项可以显示带颜色的 行号。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/7a62899b5cd70409fff5801d9728cc77.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- -i选项不区分大小写。 比如 文件中有一个nologin 是大写的,那在-n显示的时候 就不会过滤出来 但是加了i 就会显示。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/639c6a7db1c296ae270a52a03888063d.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- -v是取反的意思,就是一个文件中,不带关键词的都被过滤掉了 -v就是把被过滤掉的显示出来。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/292ad32b2a5a0d9cd10886a099391557.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- -r就是遍历所有子目录。比如过滤 包含root 的etc下所有目录,它就会显示出来。 不加-r 他会提示这是一个目录。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/11a3a324eddea2cf12ba2279d6dc7a81.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/42238e432fd654b238272f7b9cca2d35.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 只能针对文件去做 不加r 的过滤。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/b890cb5a765df08b761fb0a7a0a60365.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 在刚才的-r 过滤中也过滤出了 passwd 的含有root的 内容,如果向上翻找很麻烦的话,可以重定向到一个文件里去,这样就能很快查看到 你想要的结果了。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/ddfd0cb6f47aab82c4059fc0eda913d6.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- -A +数字 就是把你过滤出来的关键词加上关键词下面的数字行 比如 A2 就会列出 关键词下面的两行。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/cf7278b3d72ab4acd7b2411bf52dc4a9.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- -B和A类似 是以上数字行
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/436ea18d5dc143bc074f4ebbfdadba62.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- -C是A和B的结合 会列出关键词行数的上下各数字行。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/ec81e5da624ac2ccfb26061b0cbd1fbc.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
grep/egrep 示例
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/267b9902c668ec111980eb501ccd4f08.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- grep的用法有很多,比如过滤文件中的数字。 加上-v就是除了数字外都过滤出来,但是这个文件中没有不包含数字的行。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/6630189ad34f86a8cd6d7236f1693451.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- grep 也可以过滤 文件中以某个字母或者符号开头的 用^ ,^的意思是以什么开头,。加上-v就是除了us开头的都过滤出来。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/940bc2220350da37bb2b21be3c412972.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 以后可能会看很多服务相关的配置文件,就可以用这个方法,把带#的注释的行过滤掉。
- 还有一种用法,就是把除了数字或者字母 或者特殊符号 以外的都给过滤出来。这个和过滤数字正好相反。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/fda5bef654fc11a302d0034bded45e22.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 还有个操作就是 ^[^0-9] 这个字符串的意思就是以非数字的开头的行 过滤出来、
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/e6e79438d9be345a1ef3e1b1c86c59d2.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- ^ 这个字符 放在方括号外面 是以什么开头 放在里面就是取非。
- grep 'r.0' passwd 【.】点的意思就是任意一个字符,可以从操作中看出,r和o直接是任何字符都可以过滤出来。包括数字 特殊符号 还有. 本身、
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/3275e008eb81031afe6f29a3b73d850b.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- grep 'mer' passwd 的意思是 在*前面的字符重复0-n次 这个n是表示多少次都可以。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/a79380365d8802f46ce568ab26a7de42.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 【.*】组合起来就是 过滤所有字符,因为.表示任意字符。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/03cd4259c7ab95d83568e85034251875.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- {}在grep中直接写是没有任何意义的 就是一个花括号。 但是在正则中用法可以表示前面字符重复的一个范围,就是加上脱译。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/553732f90282a45bfa771a4f3cb72440.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 如果觉得这样写很麻烦 加脱译符号很别扭, 可以用egrep 这样就不用脱译符号就可以识别了。
- 或者是不用egrep 用grep -E
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/c77d594dd59a5bf29f91ad9a029f863a.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/b73aa8fbda843eb2a9fdab1ba016ccaf.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 也可以写多个字符 的重复范围,要加() 表示一个整体,加这个也要egrep 或者 -E 来脱译这个()。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/183de348d60a7156b069e5f6073f3411.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
-
- 和 挺像的, 想用+ 要脱译或者用egrep +号是前面的字符一次或者多次, 没有0。 (也就是说比如mer er前面如果没有m 就是代表er前面为0,也会把er显示出来,但是+er的话 不显示0 就是只会显示 带有m和er 的字母组合) *是0到多次。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/8762e2ed31d9d18e8425e9976996d592.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- ?表示在?前面的字符重复次数为0或者1 要么有 要么没有。(比如m?er er前面如果m很多 只会显示一个,)
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/242dcb1489ff42dfda65ec3a1a5cd451.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- | 在这里表示的意思是或者。
![学习笔记第二十五节课](https://s1.51cto.com/images/blog/201804/25/67a6fc337bffb23982933941067ba0f5.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
-
转载于:https://blog.51cto.com/13645927/2107869