时间:2017.11.20

作者:李强

参考:man,info,magedu讲义

声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。

1、使用目的与场景

一些命令都会使用到查询和匹配一些东西的时候,而正则表达式的过滤功能就可以被调用。

比如grep,find -regex ,vi ,等

2、官方说明

grep: Global search REgular expression and Print out the line

作用:文本搜索工具,根据用户指定的“模式”对目标文 本逐行进行匹配检查;打印匹配到的行

模式:由正则表达式字符及文本字符所编写的过滤条件

3、写在前面

通配符是用来匹配文件名时使用的,在命令里一般都可以使用比如ls,grep的参数file都可以是用通配符表示

正则表达式是针对字符使用的,但是正则表达式在ls里就没法使用,

使用正则表达式的工具有grep,sed,awk,wim,less,Nginx,varnish等

正则表达式(regular expressions)有:基本正则表达式BRE;扩展正则表达式ERE

正则表达式中有元字符的概念,

元字符分类:字符匹配,匹配次数,位置锚定,分组

man 7 regex    regular expressions正则表达式

man 7 glob 通配符

4、涉及文件及变量

5、用法

NAMEgrep, egrep, fgrep - print lines matching a patternSYNOPSISgrep [OPTIONS] PATTERN [FILE...]grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

这个FILE可以是好多种的文件,比如dpdc,-r 还可以用glob来表示。

我觉得理解这个概念,可以在此处放一个windows下的查找替换功能的窗口。

你想要什么操作就是option选项,你想要过滤什么内容就用正则表达式( ERE|BRE )

感觉正则表达式就像管道,左边进右边出,一次输入一行内容,然后根据匹配条件,

一个字符一个字符找,找到了匹配条件,取出字符,print为一行,然后再去匹配,取出字符,print为一行

grep 参数表

Matcher Selection:

-E egrep
-F fgerp
-G (默认)使用BRE
-P
Matching Control:
-e

-e可以跟多个pattern,各个pattern之间待验证。

另外就是可以查找-开始的字符不会当做参数操作而是当做pattern,而不用去加引号转义符\-

 -f 从文件中获取patterns模式,每行一个
-i 忽略大小写
-w

--word-regexp 输出指定词组的行,词组成成分是字母数字和下划线

,如果有其他特殊字符也会匹配这个要注意使用的场景,最好加双引号 “” ,\用[\]表示,()用\(\),具体还要分析

-v 反转匹配的结果,选择非匹配行打印出来
-x --line-regexp 只选择那些与整行完全匹配的匹配项
-y 已过时的选项,-i的同义词

General Output Control:

-c 禁止正常输出;相反,为每个输入文件打印匹配行计数。
--color=auto,always,never 默认auto
-L 找出来那个文件里不存在匹配的内容就打印出文件名可以被管道符当stdin使用
-l 和-L相反,打印出存在匹配的内容的文件名,可以被管道符当stdin使用
-m 最多只显示出查找到的几行,并不都显示出来。
-o

只打印匹配行的匹配部分(非空部分),将每个此类部分放在单独的输出行上

。比如我想知道/etc/passwd 一共有多少个bash字符,那么就可以使用这个选项然后uniq -c

-q 如果成功不输出到STDOUT,但是错误会显示错误信息。这里也是>是没用的,2>可以
-s 不管对错都不输出任何信息。注意的是不输出任何信息,> 2> 并没有作用
Output Line Prefix Control:
-b 对于文件行首开始,每个匹配项到行首的位置,第32个字符,第65个字符之类的,好像
-H (默认)当有多个搜索文件存在时,打印每个文件名
-h (默认)单只搜索一个文件时,不打印文件名
-n 打印文件中匹配的行,并且将文件中是哪行的行号也一起打印
-T 看不懂,方正加了之后格式就不会因为Hnb参数改变了
-u
-z 也看不懂,-lz然后“”print(.*)“”然后输出结果,打印出文件名,说明在文件中匹配到了,可以跨行来查找好像。
 Context Line Control:(参数后跟数字)
-A --after-context=NUM 打印匹配行并且往后显示多少行
-B --before-context=NUM  打印匹配行并且往前显示多少行
-C --context=NUM 打印匹配行并且上下显示多少行
File and Directory Selection
-a
-H
-D
-d
 --exclude=GLOB
--exclude-from=FILE
--include=GLOB
 --exclude-dir=DIR
-r 如果grep跟的是目录那么递归去查询目录下的所有文件是否包含pattern内容。
-R

字符匹配:

字符匹配怎么匹配一个字符串string不是characters,

默认比如写abc就是匹配包含有abc这个字符串的行

. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 取反的意思
字符类character class
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符(空格和字符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃、、、)
[:digit:] 十进制数字
[:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号

注意:-w,匹配单词时一定要注意的,默认不使用正则表达式的字符不加选项,

表示查找匹配包含这个字符串的行

匹配次数:

用在要指定次数的字符后面,用于指定前面的字 符要出现的次数

* 匹配前面的字符任意次,注意这里只是前面的字符,任意次就是0-∞
\? 匹配前面的字符0或者1次,0|1
\+ 匹配前面的字符至少1次,1-∞
\{n\} 匹配前面的字符n次
\{n,\} 匹配前面的字符至少n次
\{,m\} 匹配前面的字符最多m次
\{n,m\} 匹配前面的字符至少n次,最多m次

位置锚定:

行位置锚定
^ 行首
$ 行尾
^$匹配空行,^[[:space:]]*$匹配非空空白行
单词位置锚定
\< 词首
\> 词尾
\b 词起始位
\<pattern\>或者\bpattern\b但是因为有b这个单词所以还是\<\>适用广些
分组,后向引用,或
\(\) 将一个或多个字符捆绑在一起,当作一个整体进 行处理,如:\(root\)\+
后向引用 后面使用\1 \2来调用前面的第几个\(pattern1\)匹配到的字符,从左往右数,第几个小括号就是几
\| 字符或之间的关系,例如a\|b  a或b     C\|cat   C或cat   \(C\|c\)at     Cat或cat  

6、实际应用分析

1、这里PATTERN什么时候使用单引号和双引号和反向单引号呢

总之用双引号然后遇到需要转义的字符就加\,反向单引号用来调用命令,和平时查不多,最好不用单引号

2、如果要使用特殊字符本身

用转义字符表示

? 表示重复匹配0次或1次\?

+   表示重复匹配1次以上\+

[]   表示匹配[]里的任意单个字符

{}   表示这个{}要用\字符去转义 \{ \}

其他和正常一样写{n}{n,}{,m}{n,m}差不多的写法,不同的是这里表达的含义是匹配的次数而已

{n}表示的就是匹配n次,{n,}表示匹配至少n次,{,m}表示匹配最多m次,{n,m}表示匹配次数最少n次,最多m次。

()

这个东西在正则表达式就是如上\(   \) ,

然后在grep中对这个有个操作是会把()匹配的字符当做是一个变量从前往后1,2,.....,

可以用\1 \2去调用第几个()匹配的字符

|

表示或者的意思,也要用\转义,就是\|

\(a\|b\) 代表意思就是a或者b

因为 ? + {}()需要被转义,因此正常使用就是说的这个字符本身了。

相反\  *  - [] 不需要被转义,如果要使用需要用\转义来代表本身 \\ \*  \[\]

因为. 有含义,所以使用.需要被转义\.

3、grep和egrep的区别

加了转义字符\,好麻烦,所以egrep

egrep和grep区别在于不用\来转义{} () ? + |

4、pattern的一些组合

[lq@centos6 ~]$ifconfig | egrep -o  "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-2][0-2])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>"

主机可用IP地址:1-223|0-255|0-255|1-254,[]()\.等的组合用法

转载于:https://blog.51cto.com/lajifeiwomoshu/1983678

正则表达式解析_学习笔记相关推荐

  1. authconfig命令解析_学习笔记

    时间:2017.11.16 作者:李强 参考:man,info,magedu讲义 声明:以下英文纯属个人翻译,英文B级,欢迎纠正,盗版不纠,才能有限,希望不误人子弟为好. 1.使用目的与场景 先列在这 ...

  2. c语言编程实例解析精粹,C语言实例解析精粹学习笔记——35(报数游戏)

    实例35: 设由n个人站成一圈,分别被编号1,2,3,4,--,n.第一个人从1开始报数,每报数位m的人被从圈中推测,其后的人再次从1开始报数,重复上述过程,直至所有人都从圈中退出. 实例解析: 用链 ...

  3. DHCP服务_学习笔记

    DHCP服务_学习笔记 DHCP(Dynamic Host Configuration Protocol):动态主机配置协议 Lease:租约    续租时间需要是租期时间的一半 UDP协议: Ser ...

  4. db4o_8.0对象数据库官方文档翻译_学习笔记三

    紧接上篇:db4o_8.0对象数据库官方文档翻译_学习笔记二 3. Object Manager Enterprise Overview(OME视图)即OME插件的使用 If you did not  ...

  5. 韩顺平php可爱屋源码_韩顺平_php从入门到精通_视频教程_第20讲_仿sohu主页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理...

    韩顺平_php从入门到精通_视频教程_第20讲_仿sohu首页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理 对sohu页面的分析 注释很重要 经验:写一点,测试一点,这是一个很好的方法. ...

  6. 友盟统计+渠道包_学习笔记

    友盟统计+渠道包_学习笔记 资料: 官网:https://developer.umeng.com/docs/66632/detail/66889#h3-u5E38u89C1u95EEu9898 视频资 ...

  7. 图论01.最短路专题_学习笔记+模板

    图论01.最短路专题_学习笔记+模板 一.定义与性质 ● 需要的前导知识点 路径 最短路 有向图中的最短路.无向图中的最短路 单源最短路.每对结点之间的最短路 ● 最短路的性质 对于边权为正的图,任意 ...

  8. c++ qt工作量和移动端相比_学习笔记 --- QT

    0.前序 别问,问就是选修... 那毕竟3dMax动画那边结课了,我怎么就不能再发一篇笔记(极其嚣张) QT其实会去好好学的,虽然最近为了选修结课又得恶补一波 不过以后给策划造编辑器是要用的,这篇笔记 ...

  9. linux软件包管理解析,linux学习笔记_09_软件包管理解析.doc

    linux学习笔记_09_软件包管理解析 软件包管理 软件包分类 源码包(C语言编写的源代码) linux主要由C语言来写. 源码包可以用写字板打开 脚本安装包:源码包进行再开发的源码包(提供安装界面 ...

最新文章

  1. Kafka 基本原理(8000 字小结)
  2. 为什么C++(来自C++之父的观点)
  3. data transformation python_Python数据分析(方睿)
  4. 5 Vim编辑器的使用
  5. c++矩阵类_面向对象有限元编程|单元类
  6. c语言空格键么 有什么意义,C语言里这个空格键跟'\0'到底啥区别啊?
  7. linux修改可执行程序,反汇编,修改,然后重新组装一个Linux可执行文件
  8. window.open被浏览器拦截的解决方案
  9. 硬件时间,操作系统时间,Windows 和linux 双系统时间差8小时问题说明
  10. node制作http服务器,NodeJS 搭建 HTTP 服务器
  11. java 获取拦截url,java – 从数据库或属性中获取Spring Security拦截URL
  12. 深度学习之目标检测 第4章 深度学习目标检测方法
  13. flv格式怎么转换成mp4
  14. jvm之java类加载机制和类加载器(ClassLoader)的详解
  15. 携手李连杰壹基金计划 创慈善博客
  16. 学习语言的方法,你了解几种?
  17. 青铜器RDM与微软Project计划进度管理对比分析
  18. 【chrome】chrome百度网盘网页版倍速
  19. Spring Data Redis学海拾贝
  20. PubMed--医学和生命科学免费数据库

热门文章

  1. Elliptic Labs为小米量级智能手机Redmi Note 9 Pro 打造全新设计方案
  2. SPARK+LIVY
  3. ubuntu 系统环境配置记录
  4. Android 身份证号码查询、手机号码查询、天气查询
  5. lamp整合三连发(3)
  6. 获得淘宝app商品详情原数据 API 返回值说明(item_get_app-淘宝app商品详情原数据)
  7. Revit中如何编程实现窗口缩放视图
  8. 【工具使用】Keil5软件使用-进阶调试篇
  9. 计算机网络(谢希仁 第七版) 第二章(物理层)-- 2.5 数字传输系统 2.6 宽带接入技术(ADSL技术、光纤同轴混合网(HFC网)、FTTx技术)
  10. 根据标题或关键字生成内容-免费api接口