【运维知识基础篇】通配符与正则表达式

简介: 【运维知识基础篇】通配符与正则表达式

吾日三省吾身,想出类拔萃,要把知识学牢,学全,学深,学广。


特殊符号

?      表示任意单个字符
ll ?.txt
统计文件字符长度
cat 1.txt|wc -L
只会显示文件中最长一段的字符长度
单引号双引号不加引号的区别 与变量有关
echo $name  echo "$name" 输出变量
echo '$name'              输出$name字符
单引号所见即所得,不会解析变量

基础正则表达式

正则表达式 简单 高效 易用
三剑客用的都是正则
普通命令用的都是通配符
通配符找文件名称
正则表达式找文件内容
基本正则表达式无法满足需求,就出现了扩展正则表达式
^ $ . [ ] *
( ) {} ? + | 等等
^ #以什么什么开头的行
[root@VMware-koten ~]#grep '^m' test.txt 
$ #以什么什么结尾的
[root@VMware-koten ~]#grep '!$' test.txt
cat -A test.txt 在每行的结尾加$符号
空格 #可以过滤空格
[root@VMware-koten ~]#grep ' ' test.txt
$           后面跟变量 用双引号就匹配变量,用单引号就是原文本
^$          表示空行
grep -n     显示过滤前内容所在的行号
grep -v     取反,匹配出来之后,显示除了这个之外的其他的内容
.           表示除换行符外其他所有单个字符
..          每次匹配两个字符
-o          每一个字符都会按列输出
.$          每一行末尾都能匹配上,空格也能匹配上
\.$         以.结尾
\           转义字符
\n          换行符
\t          tab键
*           前一个字符出现0及0次以上,如果没有,则显示所有内容
            匹配到了再-o,会把匹配的部分,匹配的一个部分显示一行
.*          所有字符,并且-o后每一个部分显示一行
[0-9a-zA-Z:,.]   匹配区间,中括号也有脱马甲的意思,所以说.前面不用加撬棍
基础正则小结
^            以什么开头的行
$            以什么结尾的行
.            任意单个字符
.*           任意所有字符
^$           表示空行
[abc]        表示任意单个字符,中括号中还原本意
[^abc]       除了abc其他的字符,都匹配,^在中括号中取反
^[abc]       查找要么a要么b要么c开头的
[^^abc]      第一个是取反,第二个是还原本意,普通字符
[0-9]        区间也支持
[a-z]        区间也支持
[0-9a-zA-Z]  区间也支持
[a-Z]        区间也支持

扩展正则表达式

(){}?+|
grep -E      支持扩展正则
egrep        支持扩展正则
+            前一个字符出现1次及1次以上 跟*的区别是出现0次不会所有内容都出现
|            或者,可以同时过滤多个条件
1{n,m}       前一个数字1最少出现n次,最多出现m次,可能出现部分比m次数多,但是-o会发现一行最多m次
1{m}         前一个数字1最多出现m次
()           一个整体,配合+使用,如果是一个整体-o,出现部分如何连续,会连贯出现。
             如果只是一个字符出现1次或1次以上,会一个一列出现

企业常用正则表达式

1.过滤以什么开头 ^ ^#
2.^$ 空行
3.[]
4.[]+ awk结合
5.sed后向引用()
常用通配符
1.*.txt
2.[1-9].txt
3.{}

正则使用案例分享

1、将ip add中的ip筛选出来。

2、我们看到IP所在行是eth0结尾的,将IP所在行筛选出来

ip add|grep 'eth0$'

3、我们知道IP是由0-9数字和点组成,我们通过这个方式筛选。设置中括号里面字符最多出现10次。

ip add|grep 'eth0$'|egrep [0-9.]{10}

4、当然IP数字和点出现次数不一定每次都是10,如果找通用方法,我们需要用拼接的方式。

ip add|grep 'eth0$'|egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

5、匹配到该行IP就好说了,咱们直接grep -o,然后head -1即可。

ip add|grep 'eth0$'|egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' -o |head -n1

大功告成!


我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

目录
相关文章
|
19天前
|
关系型数据库 MySQL 数据库
MySQL通配符和正则表达式(数据库学习—— 二)
MySQL通配符和正则表达式(数据库学习—— 二)
24 1
|
19天前
|
前端开发 关系型数据库 MySQL
前端知识笔记(二十九)———MySQL通配符和正则表达式
前端知识笔记(二十九)———MySQL通配符和正则表达式
33 0
|
7月前
|
运维 JavaScript 前端开发
运维(16)-shell正则表达式
运维(16)-shell正则表达式
36 0
|
关系型数据库 MySQL
MySQL必知必会使用通配符和正则表达式数据过滤
MySQL必知必会使用通配符和正则表达式数据过滤
212 0