day13预习笔记
什么是正则表达式?
简单来说,正则表达式就是为处理大量的字符串及文本而定义的一套规则和方法。
Linux三剑客的正则表达式的特点:
1、为了处理大量文本及字符串而定义的一套规则和方法。
2、其工作时以行为单位进行,即一次处理一行。
3、通过正则表达式可以将复杂的处理任务化繁为简,提高操作Linux的效率。
4、仅被三剑客(grep/eprep、sed、awk)命令支持,其他命令无法使用。
为什么要学习正则表达式?
因为工作需要,,正则表达式就是为过滤字符串而生的。
正则表达式的分类:
基本正则表达式(Basic Regular Expression, BRE),
BRE对应的元字符有^,$,.,[],*。
拓展正则表达式(Extended Regular Expression ,ERE)
ERE在BRE的基础上增加了(),{},?,+,|等字符。
常用的基本恩正则表达式集合
^ 尖角号,用法为^oldboy,表示匹配以oldboy单词开头的行
$ 美元符用法为oldboy$,表示匹配以oldboy单词结尾的词
^$ 组合符,表示空行,逻辑解释就是以^结尾的行,或者以$开头的行
. 点号,表示匹配任意一个且只有一个字符(但是不能匹配空行)
\ 转义字符,让有特殊含义的字符脱掉马甲,显出原形,查看\.只表示小数点
* 匹配前一个字符(连续出现)0次或者1次以上
.* 组合符,匹配所有内容
^.* 组合符,匹配以任意多个字符开头的内容
.*$ 组合符,以任意多个字符结尾的内容
[abc] 匹配[]集合内的任意一个字符a或b或c;[abc]也可写成[a-c]
[^abc] 匹配不包含^ 后的任意字符a或b或c,这里的^表示对[abc]取反
+ 匹配前一个字符1次或1次以上
[:/}+ 匹配括号内地: 或/字符1次或1次以上
? 匹配前一个字符0次或1次
| 表示或者,即同时过滤多个字符串
() 分组过滤被括起来的东西表示一个整体,另外()的内容可以被后面的\n引用,n为数字,表示引用第几个括号的内容
\n 引用前面()里的内容,
a{n,m} 匹配前一个字符最少n次,最多m次
a{n,} 匹配前一个字符最少n次
a{n} 匹配前一个字符正好n次
a{,m} 匹配前一个字符最多m次
特别强调 支持拓展正则的三种方法:
1、grep命令加-E参数即可支持拓展正则
2、grep命令不加参数不能可以使用拓展正则表达式的特殊字符,但有个条件,就是需要在使用的每个特殊字符前面加反斜线\、
3、grep命令直接支持拓展正则。
sed:留编辑器
sed是Stream Editor (字符流编辑器)的缩写,简称流编辑器
sed是操作、过滤和转换文本内容的强大工具。常用功能有对文件实现快速增删改查,其中查询的功能中最常用的2大功能是过滤(过滤指定字符串)和取行(取出指定行)。
语法格式:
sed [选项] [sed内置命令字符] [输入文件]
-n 取消默认sed的输出,常与sed内置命令的p连用。
-i 直接修改文件内容,而不是输出到终端。如果不适用-i选项,sed只是修改在内存中的数据,并不会影响磁盘上的文件
-e 允许多次编辑
a 以为append,表示追加文本,在指定行后添加一行或多行文本
d 意为delete, 表示匹配行的文本
i 意为insert, 表示插入文本,在指定行前添加一行或多行文本。
p 意为print,表示打印匹配行的内容,通常p会与选项-n一起使用
s/regexp/replacement/g 匹配regexp部分内容,用replacement替换regexp匹配的内容,regeexp部分可以使用正则表达式,在replacement部分可以使用特殊字符&和\1-9\等匹配regexp部分的部分内容。在实战场景中,s/regexp/replacement/g 结尾通常与g匹配做全局的替换