正则表达式使用单个字符串来描述/匹配一系列符合某句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索/替换那些符合某个模式的文本。正则表达式的缩写为regex
基本语法
- 选择“|”:例如“boy|girl”可以匹配“boy”或者“girl”
- 数量限制有:*、+、?、.
注意:如果在一个模式中不加数量限制符则表示出现一次且仅出现一次
![]()
- 范围和优先级:()圆括号可以定义模式字符串的范围和优先级,理解为是否将括号内的模式串作为一个整体
例如:“gr(a|e)y”等价于“gray|grey”(体现了优先级)
再如:“(grand)?father”匹配father和grandfather(体现了范围,将圆括号内容作为一个整体匹配)- 语法
- 优先级:从上到下,从左到右,依次降低
- regex的思导图
grep模式匹配命令
1.grep命令
用于打印输出文本中匹配的模式串,它使用正则表达式作为模式匹配的条件。grep支持三种正则表达式引擎,分别用三个参数指定
通过grep命令使用正则表达式之前,掌握它的常用参数,如下:
举例操作如下:
![]()
使用基本正则表达式,BRE
2.数量举例说明如下
匹配以‘z’开头以‘o’结尾的所有字符串,除了换行符
匹配以‘z’开头以‘o’结尾,中间包含一个任意字符的字符串
匹配以‘z’开头,以任意多个‘o’结尾的字符串
3.选择举例说明如下
![]()
操作结果如下:
4.完整的特殊符号及说明
![]()
使用特殊符号的原因,是因为上面的[a-z]不是在所有情况下都管用,与主机当前的语系有关,用[:lower:]不会有此问题
5.排除字符的举例说明
注意:当“^”放到中括号内为排除字符,否则表示行首
使用扩展正则表达式,ERE
6.数量上,通过grep使用扩展正则表达式需要加上-E参数,或使用egrep
只匹配‘zo’
匹配以‘zo’开头的所有单词
7.选择上
匹配“www.shiyanlou.com”和“www.google.com”
匹配不包含“baidu”的内容
![]()
注意:以上命令的模式表达式中的“.”因为有特殊含义,所以需要转义
sed流编辑器
1.sed用于过滤和转换文本的流编辑器,它是一个非交互式的编辑器
2.sed的命令基本格式
sed [参数] [执行命令] [输入文件]
举例如下:sed -i ‘1s/sad/happy/’ test
解释:表示将test文件中第一行的”sad“替换为”happy“
3.sed中的参数详细列表如下
![]()
4.sed执行命令举例说明
将test文件中的所有shiyanlou替换为happy
![]()
其中的g表示全局范围再举一个例子,是在后面加上作用范围
其中,-i代表直接修改文件内容,2s表示在第二行内的替换,1代表指定行内中的第一个匹配字符串
另外一个例子是以指定的行数和步长数进行匹配
5.常用动作指令详细列表如下
打印指定行
行内替换,将输入文本中”shiyanlou“全局替换为”hehe“,并只打印替换的那一行
![]()
其中p代表只打印指定行,且不能省略,一般与-n结合使用
6.行间替换,打印显示指定文件匹配的行数及内容
awk文本处理语言
1.awk是一种优良的文本处理工具,是最强大的数据处理引擎之一
作用如下
- 创建简短的程序
- 创建的程序读取输入文件
- 数据排序
- 处理数据
- 对输入执行计算
- 生成报表
awk的目录
2.awk所有的操作都是基于pattern(模式)——action(动作)对来完成
如果没有pattern则默认匹配输入的全部文本,如果没有action则默认打印匹配内容到屏幕
3.awk处理的方式是将文本分割成一些”字段“,然后在对这些字段进行处理,默认以空格作为一个字段的分割符
4.awk命令基本格式
awk [-F fs] [-v var=value] [-f prog-file | ”program text”] [file…]
其中-F用来指定字段分割符,-v用于预先为程序设定变量,-f用于指定awk命令要执行的程序文件,不加-f直接将程序语句放在这里,最后为awk要处理的文本输入,可以同时输入多个文本文件举例如下:使用awk将文本内容打印到终端
![]()
其中:”{}“中的内容为动作,print为打印,这条命令省略了pattern模式,所以匹配的是全部内容举例说明:将test的第三行的每个字段单独显示为一行
另外一个例子:将test的第二行的以点为分段的字段转换成以空格为分隔
5.awk常用的内置变量