吾日三省吾身,想出类拔萃,要把知识学牢,学全,学深,学广。
特殊符号
? 表示任意单个字符 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年运维经验,持续分享运维干货,感谢大家的阅读和关注!