目录
一、正则表达式
1、正则表达式的作用正则表达式的组成
2、正则表达式的常见选项和正则表达式常见的元字符
3、正则表达式的基本应用
4、扩展正则表达式
二、sed和awk
1、sed的作用和sed的工作流程
2、sed命令常见的选项和操作符
3、sed的基本应用
4、awk的使用
5、awk的基本应用
测试、命令行仅输出IP地址
1)正则表达式的作用
针对文件或者文本内容进行处理
帮助用户快速查找文本文件内容
2)正则表达式的组成
普通字符
大写A-Z
小写a-z
符号
元字符
1)正则表达式grep常见的选项
-n:显示行号
-o:只显示匹配内容
-i:不区分大写或者小写字母
-v:取反
-E:支持扩展
-q:静默执行
-w: 识别为单词
-c: 统计匹配的行数
2)正则表达式的元字符
^:匹配行起始内容
$:匹配行结束内容
.:匹配任意单字符
.*:匹配任意字符
[]:匹配括号里边的内容
[-]:匹配括号里边内容的范围
{n}:匹配的范围的次数
[n1-n2]:匹配开始和结束内容
{ n,m }:重复前面的一个字符n到m次
{ n, }:重复前面的一个字符至少n次
[^]:匹配括号之外的任意字符
\:转义字符
\<: 固定词首
\>: 固定词尾
1)过滤关键字是the显示出来
[root@centos01 ~]# grep -n 'the' test.txt
2)查看行开始是the显示出来
[root@centos01 ~]# grep -n '^the' test.txt
3)匹配任意单个字符
[root@centos01 ~]# grep -n 'w.d' test.txt
4)匹配括号里边的内容
[root@centos01 ~]# grep -n 'sh[io]rt' test.txt
5)只显示匹配的内容
[root@centos01 ~]# grep -o 'wod' test.txt
6)通配符应用匹配开始是w结束是d中间的任意字符
[root@centos01 ~]# grep -n 'w*d' test.txt
7)转移字符的基本应用,过滤IP地址信息
[root@centos01 ~]# grep -n -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" test.txt
1)扩展正则表示常见的元字符
+:重复一次或者多次前面字符显示出来
?:显示当前字母前一个字符
|:或者,显示多个字符
():查找组字符串
()+:辨别多个重复组
2)扩展正则表达式的应用
[root@centos01 ~]# egrep -n 'wo+d' test.txt |
将重复o的内容显示出来 |
[root@centos01 ~]# egrep -n '?d' test.txt |
将d前边内容显示出来 |
[root@centos01 ~]# egrep -n 'linux|Linux' test.txt |
将匹配的linux或者Linux显示出来 |
[root@centos01 ~]# egrep -n '(h|o|r)' test.txt |
将包含h、o、r的字符所在行内容显示出来 |
[root@centos01 ~]# egrep -n 's(hor)t' test.txt |
将开头s结束t中间连续是hor的单词显示出来 |
1)sed的作用
sed是一个文本文件解析转换工具
用于读取、修改、显示数据
2)sed的作用流程
读取数据:从文件、输入、管道命令中读取数据,临时存储数据
执行:根据sed命令在模式操作空间中进行无交互修改数据
显示:将文本文件的修改结果进行打印显示
1)sed命令选项
-n:显示处理后的结果
-h:显示帮助
-e:指定命令或者脚本处理输入的文本文件
-f:指定脚本处理输入的文本文件
-i:直接编辑文本文件
2)sed的操作符号
a:添加内容
d:删除内容
p:打印内容
s:替换内容
y:字符转换
c:将特定行替换成指定的内容
1)显示1到5行数据
[root@centos01 ~]# sed -n '1,5p' test.txt
2)显示奇数行
[root@centos01 ~]# sed -n -e '1p;3p;5p' test.txt
3)删除第一行数据
[root@centos01 ~]# sed '1d' test.txt
4)删除空行
[root@centos01 ~]# sed -i '/^$/d' test.txt
5)将大写THE修改为小写the
[root@centos01 ~]# sed -i 's/THE/the/' test.txt
6)ip关键字添加注释
[root@centos01 ~]# sed -i '/^ip/s/^/#/' test.txt (含有ip字符的行前面添加#)
7)迁移字符将1~5行迁移到15行后
[root@centos01 ~]# sed -i '1,5{H;d};15G' test.txt
8)将1~5行移动到15行和16行之间
[root@centos01 ~]# sed -i '1,5H;15,16G' test.txt
[root@centos01 ~]#ifconfig ens32 | sed –n ‘2 s/.*inet //p’| sed ‘s/n.*//’
[root@centos01 ~]#ifconfig ens32 |sed -nr '2 s/.*et (.*) n.*/\1/gp'
1)awk的作用
过滤和读取数据使用
2)awk的变量
FS:文本字段的分隔符,可以使用空格为占位符
NF:处理行数
NR:处理数据的行号
$0:处理数据的整行数据
$n:处理数据行的第几列数据
1)显示所有内容
[root@centos01 ~]# awk '{print}' 1.txt
2)显示第一列数据
[root@centos01 ~]# awk '{print $1}' 1.txt
3)在第一列和第二列之间添加--
[root@centos01 ~]# awk '{print $1"--"$2}' 1.txt
4)显示第一行和第二行数据
[root@centos01 ~]# awk 'NR==1,NR==2{print}' 1.txt
5) sort 排序
[root@centos01 ~]#sort –nr 123 #排序 r是逆序
[root@centos01 ~]#sort 123 | uniq –c #去重,统计出现次数
[root@centos 01~]# history | awk '{print $2}' | sort |uniq -c |sort -nr |head -5
[root@centos ~]# history | awk '{print $2}' | sort |uniq -c |sort -nr |sed -n '1,5p'
#将用过的命令从大到小排列,取前5个
[root@centos ~]# history | awk '{print $2}' | sort |uniq -c |sort -nr |awk 'NR<=5{print}'
[root@bogon ~] ip a|awk 'NR==9{print$2}'
192.168.1.12/24
[root@bogon ~] ip a|sed -n '9 s/.*inet//p'|sed 's/b.*//'
192.168.1.12/24
2.查看web的log日志,检测出异常IP
cat www.new1019.xianqujingpinwang.log| sed -n '/23\/Nov\/2022:0/,/23\/Nov\/2022:12/p'|grep `date "+%d/%b"`|awk '{print $1}'|sort |uniq -c |sort -rn|wc -l
#12个小时内谁访问量最多