新手初做网站,什么外贸网站做箱包好,河南网站怎么备案,野花香视频在线观看免费高清版一#xff0c;正则表达式
#xff08;一#xff09;正则表达式相关定义
1#xff0c;正则表达式含义
REGEXP#xff1a; Regular Expressions#xff0c;由一类特殊字符及文本字符所编写的模式#xff0c;其中有些字符#xff08;元字符#xff09;不表示字符字面意…一正则表达式
一正则表达式相关定义
1正则表达式含义
REGEXP Regular Expressions由一类特殊字符及文本字符所编写的模式其中有些字符元字符不表示字符字面意义而表示控制或通配的功能类似于增强版的通配符功能但与通配符不同通配符功能是用来处理文件名而正则表达式是处理文本内容中字符。
2正则表达式支持的语言
vim, less,grep,sed,awk, nginx,mysql 等
3正则表达式分类 基本正则表达式 扩展正则表达式 编程语言支持的高级正则表达式
4基础正则表达式 扩展正则表达式区别
grep sed默认使用基础正则表达式
grep -E、sed -r、egrep、awk扩展正则表达式
扩展正则表达式 加\ 二元字符字符匹配
1常用元字符 2元字符 .的介绍
. 匹配任意单个字符可以是一个汉字 [rootlocalhost ~]#ls /etc/|grep rc[.0-6] #此处的点代表字符 rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.d rc.local [rootlocalhost ~]#ls /etc/ | grep rc\. #点值表示点需要转义 rc.d rc.local 3,元字符 [ ] 的介绍 [rootlocalhost ~]# ls |grep [zhou].txt #匹配[]中任意一个字符 h.txt o.txt u.txt z.txt [a-z] 小写字母
[A-Z] 大写字母 [rootlocalhost ~]# ls |grep [^a-z].txt #显示非小写字母 三表示次数 表示一个qq 号码
1常用表示次数的元字符
小技巧: 怎么去记 \{n\} 把斜杠看成转义符 2匹配规则
h[abcde] 先去匹配 hello h[abcde] 再去匹配world 匹配 1到5 和9 四位置锚定 五分组或其他
1定义
分组( ) 将多个字符捆绑在一起当作一个整体处理如(root)
后向引用分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中这些变量的命名
方式为: \1, \2, \3, ... 分组
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
或者\|
2例子
2.1 匹配ccc三次 [rootlocalhost ~]#echo abccc |grep abc\{3\} abccc 2.2 匹配 abc 三次 [rootlocalhost ~]#echo abcabcabc |grep \(abc\)\{3\} #分组 匹配abc 2.3 匹配 1或 2abc [rootlocalhost ~]#echo 1abc |grep 1\|2abc #只匹配了1 1abc 2.4 匹配 1abc 或者 2abc [rootlocalhost ~]#echo 1abc |grep \(1\|2\)abc #1abc或者2abc 1abc 2.5 提取ip地址 [rootlocalhost ~]#ifconfig ens33|grep netmask|grep -o \([0-9]\{1,3\}\.\)\{3\}[0-9]\{3\}|head -1 192.168.91.100 二 扩展正则表达式表示字符相差不大
grep -E 或者egrep
一表示次数 * 匹配前面字符任意次 ? 0或1次 1次或多次 {n} 匹配n次 {m,n} 至少m至多n次 {,n} #匹配前面的字符至多n次,nn可以为0 {n,} #匹配前面的字符至少n次,nn可以为0 二 表示分组 () 分组 分组() 将多个字符捆绑在一起当作一个整体处理如\(root\) 后向引用\1, \2, ... | 或者 a|b #a或b C|cat #C或cat (C|c)at #Cat或cat 三 例子
1表示qq号 [rootlocalhost ~]#echo aa940132245 |grep \b[0-9]\{6,12\}\b 位置锚定后像aa940132245这种杂项 就不会被过滤了
这样我们只会过滤 我们想要的 qq号 前后加\b 位置锚定
如 grep name 可能会匹配 hostname grep \bname\b 只会匹配name 前后的\b 相当于符号电脑可以识别 2, 表示邮箱 echo zhouqq.com |grep -E [[:alnum:]_-][[:alnum:]_]\.[[:alnum:]_] 3表示手机号 echo 13705173391|grep -E \b1[3456789][0-9]{9}\b 三grep
一通式
grep [选项]… 查找条件 目标文件
二选项 三选项详细介绍
1grep 支持 标准输入标准输出文件内容 2-m 1 匹配一次就停止 3, -i 忽略大小写 4 -c 行数 5-o 显示匹配内容 6-A 匹配后三行 -B 匹配前三行 -C 匹配前后三行 7 -e 或 8 -E 启用扩展正则grep 默认基本正则
9-W 匹配单词
和正则表达式 \b 用途相似 10 -r递归目录但不处理软链接 -R递归目录但处理软链接muku 目录 文件夹 四示例
1提取 ip 表示1 或多次 [rootlocalhost yum.repos.d]# ifconfig ens33 |grep -o [0-9]\\.[0-9]\\.[0-9]\\.[0-9]\ 192.168.91.100 255.255.255.0 192.168.91.255 [rootlocalhost yum.repos.d]# ifconfig ens33 |grep -o [0-9]\\.[0-9]\\.[0-9]\\.[0-9]\|head -1 192.168.91.100 2 统计当前主机的连接状态 [rootlocalhost ~]# ss -nta | grep -v ^State |cut -d -f1|sort |uniq -c 3 统计当前连接主机数 [rootlocalhost ~]#ss -nt |tr -s |cut -d -f5|cut -d : -f1 |sort|uniq -c 四sed
一sed 介绍
sed 即 Stream EDitor和 vi 不同sed是行编辑器读取一行处理一行。
用于大文件电脑内存不够vim打不开大于内存大小的文件 二基本用法 sed [option]... script;script;... [input file...] 选项 自身脚本语法 支持标准输入管道 1 常用选项 常用选项 -n 不输出模式空间内容到屏幕即不自动打印 -e 多点编辑[rootwww data]#sed -n -e /^r/p -e/^b/p /etc/passwd -f FILE 从指定文件中读取编辑脚本 -r, -E 使用扩展正则表达式 -i.bak 备份文件并原处编辑 #说明: -ir 不支持 -i -r 支持 -ri 支持 -ni 会清空文件 2常用基本用法
2.1 sed 为空 看文件内容 2.2 支持重定向 2.3 支持管道符 2.4 n 选项是关闭自动打印 p语法选项打印
系统自带自动打印 三sed 脚本格式
单引号中间需要写脚本脚本格式如下
地址命令组成
1地址 相关语法
1.1 不给地址 全文处理
vim不给地址:默认光标当前行
1.2 单地址
2p 第二行 $最后一行 1.3 地址范围
1,3 1到3行 1.4 3q 1到3行 (不能加 -n)
1.5 r 开头 f结尾 1.6 某一天几点几分 到 某一天几点几分 的日志 12\/Jan\/2024:04:12:06
这是时间 Jan 和2024 前面的/ 需要转义
1.7 步进 打印奇数行偶数行
1~2 奇数 2~2偶数 sed -n n;p 2命令相关语法
2.1 命令的选项 2.2 真删 sed -i 2.3 删之前备份 sed -i.bak 2.4 在第三行的后一行 追加 a 2.5 追加多行内容 \n 换行 2.6 在第三行的前一行 追加 i 2.7 替换 c 2.8 把第三行写到 新文件 w 2.9把新文件插入 第二行 r 四 搜索替代
1通式
新内容一定是固定的字符串不能有通配符 s/pattern/string/修饰符 查找替换,支持使用其它分隔符可以是其它形式ss### 替换修饰符 g 行内全局替换 p 显示替换成功的行 w /PATH/FILE 将替换成功的行保存至文件中 I,i 忽略大小写 2示例
2.1 修改防火墙 2.2 变量 指前面找的内容 2.3 分组替换
-r, -E 使用扩展正则表达式 \1 是扩展正则表达式表示第一个括号里的内容 2.4 提取ip .* 意思 1到正无穷 任意长度字符 约等于 2.5 提取中间的数字 2.6 提文件权限
提取第四行
然后提取(四个0到9的数字)
提取里的内容 五sed 支持变量 六 不打开配置文件 改配置文件 七sed 高级用法
1模式空间 保持空间
sed 中除了模式空间还另外还支持保持空间(Hold Space)
利用此空间可以将模式空间中的数据临时保存至保持空间从而后续接着处理实现更为强大的功能
2常见的高级命令 3示例
3.1 打印偶数行 4种写法
第一种写法 #解释 n;p
此处 n 是读取匹配到的行的下一行覆盖至模式空间 p 是打印
先读第一行是 数字1
然后匹配第二行将第二行覆盖就是把 数字2 覆盖 数字 1 再输出
这样第一行第二行都处理完毕
接下来从第三行开始以此类推 第二种写法 这是步进从第二行开始隔两行打印一次 第三种写法 这也是步进 从第一行开始隔两行删除删除了奇数行剩下的就是偶数行注意次出不要加 -n 第四种写法 反选的意思 奇数反选 3.2 小p 大P 区别
小p 是打印的意思 大P 指打印模式空间开端至\n内容并追加到默认输出之前
N 指读取匹配到的行的下一行追加至模式空间 小p 打印 此处N 到模式空间 就是
1
2
大P 是打印 \n 之前的内容换行之前的内容 即 数字 1
依次类推打印奇数 3.3 前后两行追加 3.4 倒序 五awk
一awk 含义
vim 是将整个文件加载到内存中 再进行编辑 受限你的内存
awk语言 读取一行处理一行
在 Linux/UNIX 系统中awk 是一个功能强大的编辑工具逐行读取输入文本默认以空格或tab键作为分隔符作为分隔并且默认会压缩空格并按模式或者条件执行编辑命令。而awk比较倾向于将一行分成多个字段然后进行处理。AWK信息的读入也是逐行
指定的匹配模式进行查找对符合条件的内容进行格式化输出或者过滤处理可以在无交互
的情况下实现相当复杂的文本操作被广泛应用于 Shell 脚本完成各种自动化配置任务。 二工作原理
前面提到 sed 命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个“字段”然后再进行处理且默认情况下字段的分隔符为空格或 tab 键。awk 执行结果可以通过 print 的功能将字段数据打印显示。
三awk通式 awk [options] program varvalue file… 1program组成
program通常是被放在单引号中并可以由三种部分组成 BEGIN语句块 模式匹配的通用语句块 END语句块
2Program格式 xxxxxxxxxx1 11 1pattern{action statements;..} pattern决定动作语句何时触发及触发事件比如BEGIN,END,正则表达式等 action statements对数据进行处理放在{}内指明常见print, printf output statementsprint,printf Expressions算术比较表达式等 Compound statements组合语句 Control statementsif, while等 input statements
3awk 常见选项 -F “分隔符” 指明输入时用到的字段分隔符默认的分隔符是若干个连续空白符 -v varvalue 变量赋值 四 awk 执行原理
第一步执行BEGIN{action;… }语句块中的语句
第二步从文件或标准输入(stdin)读取一行然后执行pattern{ action;… }语句块它逐行扫描文件 从第一行到最后一行重复这个过程直到文件全部被读取完毕。
第三步当读至输入流末尾时执行END{action;…}语句块 BEGIN语句块在awk开始从输入流中读取行之前被执行这是一个可选的语句块比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中 END语句块在awk从输入流中读取完所有的行之后即被执行比如打印所有行的分析结果这类信息汇总都是在END语句块中完成它也是一个可选语句块 pattern语句块中的通用命令是最重要的部分也是可选的。如果没有提供pattern语句块则默认执行{ print }即打印每一个读取到的行awk读取的每一行都会执行该语句块 五awk 使用方法
1输出原来内容 2提取某一行 并输出 3 指定分隔符 -F 4 BEGIN语句块 END语句块
改变执行顺序先BEGIN 再print$1 改变执行顺序先print$1 最后END 5,重定向
passwd 有多少行 hello 打多少行 6awk 可以当计算机
注意此处 awk 没有处理的文件对象所以加一个BEGIN 7, 提取磁盘占用率 8 改输出内容分隔符
输出内容默认空格做分隔符 9 提取网卡的 ip 地址awk sed awk方法; sed 方法
-rn r启用扩展正则 n 不打印
2p 打印第二行
\1 打印第一个括号的内容 10提取普通用户 uid 号大于等于1000 11统计当前主机的连接状态
第一种方法
第二种方法 第三种方法 #解释
NR!1 先去掉第一行
a[$1] a是数组名 [$1] 第一个位置变量listen 或者estab
a[$1] 就是 a的数组把isten 或者estab 当做下标且自循环加1出现一次加1
end 做完以上结束后再做下面的动作
for(i in a)print i,a[i] 这是遍历的意思 12去重 非0 是真 0是假
#解释 zzz 是数组名 $0 就是把一整行作为参数写进去 是最后执行 前面zzz[$0] 处理完再 针对aa: 初始 取反 是否打印 打印后
第一次 为空假 非0真 打印 真1
第二次 真1 真 假 0 不打 01
第三次 01真 假0 不打 01
第四次 01真 假0 不打 01 所以aa 不论有多少行只打印一次达到去重的效果 13提出主机名再放指定文件夹
第一种方法awk 第二种方法cut 第三张方法sed 14,统计/etc/fstab文件中每个文件系统类型出现的次数 15,统计/etc/fstab文件中 真单词的个数 16 提取一长串乱码中的数字 17提取 文件权限
方法1sed 方法2awk 18,查出uid最大的用户的 uid 用户名 shell类型 这边有个小技巧awk 提取的时候把 uid放第一列
方便我们后续用 sort -n 排序 19打印 1-200 之间所有能被7整除 并且包含数字7 的整数 20提取内存 使用率
先提出 内存这一行用使用内存 除 所有内存 取整 并加 % 21 看ssh 登录失败看谁在暴力破解密码 六awk 常见的内置变量 awk 选项 -F “分隔符” 指明输入时用到的字段分隔符默认的分隔符是若干个连续空白符 -v varvalue 变量赋值 1内置变量具体内容 awk 选项 模式{print } FS :指定每行文本的字段分隔符缺省默认为空格或制表符tab。与 “-F”作用相同 -v FS: OFS输出时的分隔符 NF当前处理的行的字段个数 NR当前处理的行的行号序数 $0当前处理的行的整行内容 $n当前处理行的第n个字段第n列 FILENAME:被处理的文件名 RS行分隔符。awk从文件上读取资料时将根据RS的定义就把资料切割成许多条记录而awk一次仅读入一条记录进行处理。预设值是\n 2 示例展示 内置变量
2,1 FS 自定义分隔符
二者效果相同 此外FS 支持bash 变量 2.2 RS 行分隔符 代表一行结束 2.3 NF 你一行有多少列 $NF 表示最后一列 2.4 NR 行号的序号
显示行号 打印第二行 固定格式 2个等号 2 到5行 不要第一行 2.5 FNR 将两个文件合并 并显示行号 七自定义变量
1自定义变量具体内容 printf %s显示字符串 %d, %i显示十进制整数 %f显示为浮点数 %e, %E显示科学计数法数值 %c显示字符的ASCII码 %g, %G以科学计数法或浮点形式显示数值 %u无符号整数 %%显示%自身 2用法 八模式
awk 模式{处理动作}
PATTERN:根据pattern条件过滤匹配的行再做处理 模式其实就是选择的条件awk是逐行处理文本的也就是说awk会先处理完当前行再处理下一行当不指定任何条件awk会一行一行的处理文本中的每一行如果指定了条件只有满足条件的行才会被处理不满足条件的行就不会被处理。 1正则匹配 2找到10:00 到11:00 之间的日志 sed -nr /10/,/11/p awk /10/,/11/ 3,关系表达式 非0 是真 0是假
3.1 非0 是真 3.2 n
除了第一行都打印 #解释 第一次循环n0 所以不打印 数字1 后面循环依次加1 都大于0 所以后面的都打印
3.3 0
都打印 3.4 i!i
打印奇数 #解释
i 一开始0 所以第一行假然后取反 是结果真 最后打印
下一行 真取反 假 不打印
3.5 i!i
打印偶数 九条件判断
1 if 语句
1.1 支持if else 注意 括号不同
1.2 支持多分支 ‘{if(判断条件){执行语句1}else if判断条件{执行语句}else if(判断条件){执行语句}}’ 2 支持 for while 循环语句 3数组
3,1 awk 数组特性 awk数组特性 awk的数组是关联数组(即key/value方式的hash数据结构)索引下标可为数值(甚至是负数、小数等)也可为字符串 1. 在内部awk数组的索引全都是字符串即使是数值索引在使用时内部也会转换成字符串 2. awk的数组元素的顺序和元素插入时的顺序很可能是不相同的 awk数组支持数组的数组 3.2 awk 数组示例
① 数字1 是关联数组是个符号 不是数字 a为 关联数组的名字 1 是个符号 不是数字 ② 遍历数组 遍历出来 顺序不固定 ③统计当前主机的连接状态 #解释
NR!1 先去掉第一行
a[$1] a是数组名 [$1] 第一个位置变量listen 或者estab
a[$1] 就是 a的数组把isten 或者estab 当做下标且自循环加1出现一次加1
end 做完以上结束后再做下面的动作
for(i in a)print i,a[i] 这是遍历的意思 ④ 去重 非0 是真 0是假
#解释 zzz 是数组名 $0 就是把一整行作为参数写进去 是最后执行 前面zzz[$0] 处理完再 针对aa: 初始 取反 是否打印 打印后
第一次 为空假 非0真 打印 真1
第二次 真1 真 假 0 不打 01
第三次 01真 假0 不打 01
第四次 01真 假0 不打 01 所以aa 不论有多少行只打印一次达到去重的效果 十 awk 模糊匹配
1用~表示包含 2~ 表示不包含