十堰网站建设,react网站开发介绍,wordpress zhai主题,大型网站开发基本流程有一段时间本机访问量过高#xff0c;如何查看日志提取出访问量前十的信息 1.使用提取命令#xff08;cut、awk、sed#xff09;提取出ip地址的那一列 2.使用sort按数字排序#xff0c;将相同的地址整合到一起 3.使用uniq -c统计出数量 4.使用sort 数字 数字倒序排序 5.最… 有一段时间本机访问量过高如何查看日志提取出访问量前十的信息 1.使用提取命令cut、awk、sed提取出ip地址的那一列 2.使用sort按数字排序将相同的地址整合到一起 3.使用uniq -c统计出数量 4.使用sort 数字 数字倒序排序 5.最后用head 取前十 一、正则表达式
搜索字符的方式
精确搜索正则表达式搜索
元字符预定好的具有特殊含义的符号这些符号能够进行通配可读性非常差写正则表达式不难
1.含义
正则表达式又称正规表达式、常规表达式使用字符串来描述、匹配一系列符合某个规则的字符串正则表达式组成
普通字符大写小字母、数字、标点符号及一些其他符号元字符在正则表达式中具有特殊意义的专用字符
REGEXP Regular Expressions由一类特殊字符及文本字符所编写的模式其中有些字符元字符不表示字符字面意义而表示控制或通配的功能类似于增强版的通配符功能但与通配符不同通配符功能是用来处理文件名而正则表达式是处理文本内容中字符。 正则表达式被很多程序和开发语言所广泛支持vim, less,grep,sed,awk, nginx,mysql 等 主要用来匹配字符串命令结果文本内容
通配符匹配文件而且是已存在的文件
基本正则表达式BREbasic regular expression扩展正则表达式EREextended regular expression编程语言支持的高级正则表达式 BRE和ERE语法基本一致只有部分元字符预定义号的带有特殊含义的一些符号需要区别对待 扩展正则中这些元字符可以直接使用?、、{、}、|、(和) 基础正则中这些元字符前需要加转义\\?、\、\{、\}、\|、\(和\) grep sed默认使用基础正则表达式 grep -E、sed -r、egerp、awk扩展正则表达式 正则表达式.任意单个字符[ ]任意单个字符*前面字符出现0到正无穷1到正无穷{3}3次{n}n次n最少n次n最多n次nmn到m次^开头$结尾\b字符串的开头结尾.*1到正无穷 约等于^$空行
2.元字符
元字符含义.匹配任意单个字符可以是一个汉字[]匹配指定范围内的任意单个字符示例[zhou] [0-9] [] [a-zA-Z][:alpha:][0-9a-zA-Z] [:alnum:][^]匹配指定范围外的任意单个字符,示例[^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匹配任何非空白字符。等价于 [^ \f\n\r\t\v]\s匹配任何空白字符包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]注意Unicode 正则表达式会匹配全角空格符
[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
[rootlocalhost ~]# grep r..t /etc/passwd
#r..t ..代表任意两个字符
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[rootlocalhost ~]# echo abc |grep a.c
#表示原来的点需要加\转义
abc
[rootlocalhost ~]# echo abc |grep a\.c
#不加引号有时匹配会有出入
abc
[rootlocalhost ~]# echo abc |grep a\.c
#标准格式需要加 或者[rootlocalhost ~]# ls |grep [zhou].txt
#匹配[]中任意一个字符
h.txt
o.txt
u.txt
z.txt[rootlocalhost ~]# ls [a-d].txt
#通配符
a.txt A.txt b.txt B.txt c.txt C.txt d.txt
[rootlocalhost ~]# ls |grep [a-d].txt
#真正的小写在正则表达式中
a.txt
b.txt
c.txt
d.txt
[rootlocalhost ~]# ls |grep [^a-z].txt
#显示非小写字母
A.txt
B.txt[rootlocalhost ~]# ls |grep [^a.z].txt
#[]里就是本意不需要转义
2.1表示次数
元字符含义*匹配前面的字符任意次包括0次贪婪模式尽可能长的匹配.*任意长度的任意字符 不包括0次\?匹配其前面的字符出现0次或1次即可有可无\匹配其前面的字符出现最少1次即肯定有且≥1次\{n\}匹配前面的字符n次\{m,n\}匹配前面的字符至少m次至多n次\{,n\}匹配前面的字符至多n次≤n\{n,\}匹配前面的字符至少n次
[rootlocalhost ~]# echo google |grep go\{2\}gle
#代表前面的o出现2次
google
[rootlocalhost ~]# echo gooooogle |grep go\{2,\}gle
#代表前面的o出现2次以上
gooooogle
[rootlocalhost ~]# echo gooooogle |grep go\{2,5\}gle
#代表前面的o出现2次以上5次以下
gooooogle
[rootlocalhost ~]# echo goooooogle |grep go*gle
#表示0次到任意次
goooooogle
[rootlocalhost ~]# echo ggle |grep go*gle
ggle
[rootlocalhost ~]# echo gggle |grep go*gle
#grep 包含最前面的g不匹配
gggle
[rootlocalhost ~]# echo gdadadadgle |grep g.*gle
#.*代表任意匹配所有
gdadadadgle
[rootlocalhost ~]# echo ggle |grep go\?gle
# \?一次或者0次
ggle
[rootlocalhost ~]# echo gogle |grep go\?gle
gogle
[root[rootlocalhost ~]# echo google |grep go\gle
#一个以上
google
[rootlocalhost ~]# echo gogle |grep go\gle
gogle
[rootlocalhost ~]# echo ggle |grep go\gle
[rootlocalhost ~]# echo google |grep go\?gle[rootlocalhost ~]#echo abc|grep [abc]\{3\}
#需要加引号
#他的 匹配思路是 [abc]\{3\} 在匹配abc的时候
#第一轮 看 首字母 是否有abc中的一个 第二轮也是看是否有abc中的一个 第三轮也是看是否有abc中的一个
[rootlocalhost ~]#ifconfig ens33
ens33: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500inet 192.168.241.11 netmask 255.255.255.0 broadcast 192.168.241.255inet6 fe80::de6f:32c8:5a64:a6b2 prefixlen 64 scopeid 0x20linkether 00:0c:29:51:4b:b5 txqueuelen 1000 (Ethernet)RX packets 30993 bytes 36718841 (35.0 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 13068 bytes 2850766 (2.7 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[rootlocalhost ~]#ifconfig ens33|grep netmaskinet 192.168.241.11 netmask 255.255.255.0 broadcast 192.168.241.255
[rootlocalhost ~]#ifconfig ens33|grep netmask|grep -o [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}
192.168.241
255.255.255
192.168.241
[rootlocalhost ~]#ifconfig ens33|grep netmask|grep -o [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}|head -n1
192.168.241
3.位置锚定
符号含义^行首锚定用于模式的最左侧$行尾锚定用于模式的最右侧^PATTERN$用于模式匹配整行^$空行^[[:space:]]*$空白行tab、换行、回车\或\b词首锚定用于单词模式的左侧连续的数字字母下划线都算单词内部 \或\b 词尾锚定用于单词模式的右侧\PATTERN\匹配整个单词\root\
[rootlocalhost ~]#grep ^[^#] /etc/fstab
#过滤出不是以#开头的非空行
/dev/mapper/centos-root / xfs defaults 0 0
UUID0ebf43c7-c647-4e61-ab4f-cf6c64fb6a0c /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
[rootlocalhost ~]#cat /etc/fstab #
# /etc/fstab
# Created by anaconda on Tue Dec 19 00:11:27 2023
#
# Accessible filesystems, by reference, are maintained under /dev/disk
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID0ebf43c7-c647-4e61-ab4f-cf6c64fb6a0c /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0[rootlocalhost ~]#grep ^root$ /etc/passwd
#只匹配root这个字符[rootlocalhost ~]#echo hello-123|grep \123
hello-123
#除了字母、数字、下划线其他都算单词的分隔符
4.分组或其他
分组用将多个字符捆绑在一起当作一个整体处理
后向引用分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中这些变量的命名方式为\1,\2,\3,...\1表示从左侧第一个左括号以及与之匹配右括号之间的模式所匹配到的字符 [rootlocalhost ~]#ifconfig ens33|grep netmask|grep -o \([0-9]\{1,3\}\.\)\{3\}[0-9]\{3\}|head -1
#匹配netmask 匹配0-9任意数字出现三次 .出现三次 0-9任意数字出现三次 取第一个
192.168.241.255
[rootlocalhost ~]#ifconfig ens33 |grep netmask|grep -Eo ([0-9]{1,3}\.){3}[0-9]{1,3}|head -1
#匹配netmask 匹配0-9任意数字出现三次 .出现三次 0-9任意数字出现三次 取第一个
192.168.241.11
[rootlocalhost ~]#ifconfig ens33 |grep netmask|grep -Eo ([0-9]{1,3}.){4}
#匹配netmask 匹配0-9任意数字 . 出现一到三次 共出现四次
192.168.241.11
255.255.255.0
192.168.241.255
5.扩展正则表达式 grep -E egrep 默认使用的是扩展正则表达式 符号含义* 匹配前面字符任意次 ?0次或1次1次或多次{n}匹配n次{m,n}至少n次至多n次{,n}匹配前面的字符至多n次≤nn可以为0{n,} 匹配前面的字符至少n次≤nn可以为0
分组含义分组分组() 将多个字符捆绑在一起当作一个整体处理| 或者 a|b 表示a或b C|cat C或cat C|cat 表示Cat或cat