目录
正则表达式之
元字符
表示次数
位置锚定
分组和其他
扩展正则表达式
grep
egrep
sed
基本用法
sed脚本格式
sed常用命令
awk
基础用法
结合sed取IP地址
awk的内置变量
REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符),不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符
正则表达式被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql 等
主要用来匹配字符串(命令结果,文本内容),
通配符匹配文件(而且是已存在的文件)
-
基本正则表达式
-
扩展正则表达式
可以使用man 7 regex手册帮助
正则表达式之
元字符
元字符是一个或一组代替一个或多个字符的字符。
. 匹配任意单个字符,可以是一个汉字
[] 匹配指定范围内的任意单个字符,示例:[zhou] [0-9] [] [a-zA-Z]
[^] 匹配指定范围外的任意单个字符,示例:[^zhou] [^a.z] a.z
其他元字符
[:alnum:] | 字母和数字 |
[:alpha:] | 代表任何英文大小写字符,亦即 A-Z, a-z |
[:lower:] | 小写字母,示例:[[:lower:]],相当于[a-z] |
[:upper:] | 大写字母 |
[:blank:] | 空白字符(空格和制表符) |
[:space:] | 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广 |
[:cntrl:] | 不可打印的控制字符(退格、删除、警铃…) |
[:digit:] | 十进制数字 |
[:xdigit:] | 十六进制数字 |
[:graph:] | 可打印的非空白字符 |
[:print:] | 可打印字符 |
[:punct:] | 标点符 |
w | 匹配单词构成部分,等价于[_[:alnum:]] |
W | 匹配非单词构成部分,等价于[^_[:alnum:]] |
S | 匹配任何非空白字符。等价于 [^ fnrtv]。 |
s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ fnrtv]。注意 Unicode 正则表达式会匹配全角空格符 |
[root@localhost data]#touch {a..z}.txt
[root@localhost data]#ls
a.txt b.txt dns.sh e.txt g.txt i.txt k.txt m.txt o.txt q.txt s.txt u.txt w.txt y.txt
[a..z].txt c.txt d.txt f.txt h.txt j.txt l.txt n.txt p.txt r.txt t.txt v.txt x.txt z.txt
#匹配[]中任意一个字符#匹配不是a-z.txt文件
表示次数
* | 匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配 |
.* | 任意长度的任意字符 |
/td> | 匹配其前面的字符出现0次或1次,即:可有可无 |
+ | 匹配其前面的字符出现最少1次,即:肯定有且 >=1 次 |
{n} | 匹配前面的字符n次 |
{m,n} | 匹配前面的字符至少m次,至多n次 |
{,n} | 匹配前面的字符至多n次,<=n |
{n,} | 匹配前面的字符至少n次 |
##代表前面的o出现3次以上
#代表前面o出现2次以上4次以下
#代表o匹配任意次
#一个以上
位置锚定
^ | 行首锚定, 用于模式的最左侧 |
$ | 行尾锚定,用于模式的最右侧 |
^PATTERN$ | 用于模式匹配整行 (单独一行 只有root) |
^$ | 空行 |
^[[:space:]]*$ | 空白行 |
< 或 b | 词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部) |
> 或 b | 词尾锚定,用于单词模式的右侧 |
<PATTERN> | 匹配整个单词 |
#过滤出不是已# 开头的非空行
#过滤非空行
分组和其他
分组:() 将多个字符捆绑在一起,当作一个整体处理,如:(root)+
后向引用:分组括 中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: 1, 2, 3, …,1 表示从左侧起第一个左括 以及与之匹配右括 之间的模式所匹配到的字符
# 分组,分成三组和分成俩组
#提取ip地址(匹配数字)
扩展正则表达式
表示次数
#匹配oo字符和出现g的次数
#匹配oo
表示分组
看了扩展正则表达式是不是可以忘记普通正则表达式了,还是扩展正则表达式简单一点
grep
grep [选项]… 查找条件 目标文件
-
-i:查找时忽略大小写
-
-v:反向查找,输出与查找条件不相符的行
-
-o 只显示匹配项
-
-f 对比两个文件的相同行
-
-c 匹配的行数
egrep
egrep命令作用是在文件内查找指定的字符串。
egrep执行效果与grep -E相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。
egrep命令为 grep 的扩充版本, 改良了许多传统 grep 不能或不便的操作. 比方说:
grep之下不支持 与 + 这两种modifier, 但egrep可以。
grep不支持 a|b 或 (abc|xyz) 这类”或一”比对, 但egrep可以。
grep在处理 {n,m} 时, 需用 { 与 } 处理, 但egrep则不需要。
常用参数:
-i | 搜索时,忽略大小写 |
-c | 只输出匹配行的数量 |
-l | 只列出符合匹配的文件名,不列出具体的匹配行 |
-n | 列出所有的匹配行,显示行 |
-h | 查询多文件时不显示文件名 |
-s | 不显示不存在、没有匹配文本的错误信息 |
-v | 显示不包含匹配文本的所有行 |
-w | 匹配整词 |
-x | 匹配整行 |
-r | 递归搜索 |
-q | 禁止输出任何结果,已退出状态表示搜索是否成功 |
-b | 打印匹配行距文件头部的偏移量,以字节为单位 |
-o | 与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位 |
sed
Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(PatternSpace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。如果使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开。Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!