当前位置: 首页 > news >正文

正则表达式 与文本三剑客(sed grep awk)

一,正则表达式

(一)正则表达式相关定义

1,正则表达式含义

REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符

2,正则表达式支持的语言

vim, less,grep,sed,awk, nginx,mysql 等

3,正则表达式分类

  • 基本正则表达式

  • 扩展正则表达式

  • 编程语言支持的高级正则表达式

4,基础正则表达式   扩展正则表达式区别

grep sed默认使用基础正则表达式

grep -E、sed -r、egrep、awk扩展正则表达式

扩展正则表达式   加\

(二)元字符(字符匹配)

1,常用元字符

2,元字符  (.)的介绍

.    匹配任意单个字符,可以是一个汉字

[root@localhost ~]#ls /etc/|grep rc[.0-6]
#此处的点代表字符
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rc.d
rc.local

 [root@localhost ~]#ls /etc/ | grep 'rc\.'
#点值表示点需要转义
rc.d
rc.local

3,元字符  [  ]   的介绍

 [root@localhost ~]# ls |grep '[zhou].txt'    
#匹配[]中任意一个字符
h.txt
o.txt
u.txt
z.txt

 [a-z]   小写字母   

[A-Z]   大写字母

[root@localhost ~]# 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三次

[root@localhost ~]#echo abccc |grep "abc\{3\}"
abccc

2.2 匹配  abc 三次

 [root@localhost ~]#echo abcabcabc |grep "\(abc\)\{3\}"
#分组 匹配abc

2.3 匹配    1或    2abc

[root@localhost ~]#echo 1abc |grep  "1\|2abc"
#只匹配了1
1abc

2.4  匹配  1abc   或者  2abc

[root@localhost ~]#echo 1abc |grep  "\(1\|2\)abc"
#1abc或者2abc
1abc

2.5 提取ip地址

 [root@localhost ~]#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次,<=n,n可以为0
{n,} #匹配前面的字符至少n次,<=n,n可以为0

(二) 表示分组

() 分组
分组:() 将多个字符捆绑在一起,当作一个整体处理,如:\(root\)+
后向引用:\1, \2, ...
| 或者  
a|b #a或b
C|cat #C或cat
(C|c)at #Cat或cat

(三) 例子

1,表示qq号

[root@localhost ~]#echo "aa940132245" |grep "\b[0-9]\{6,12\}\b"

位置锚定后,像aa940132245这种杂项   就不会被过滤了

这样我们只会过滤   我们想要的        qq号

前后加\b   位置锚定     

如  grep name  可能会匹配   hostname

     grep  "\bname\b"  只会匹配name     前后的\b 相当于符号,电脑可以识别

2, 表示邮箱

echo "zhou@qq.com" |grep -E "[[:alnum:]_-]+@[[:alnum:]_]+\.[[:alnum:]_]+"

3,表示手机号

echo "13705173391"|grep -E "\b1[3456789][0-9]{9}\b"

三,grep

(一)通式

grep [选项]… 查找条件 目标文件

(二)选项

(三)选项详细介绍

1,grep 支持 标准输入,标准输出,文件内容

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 或多次

[root@localhost 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

[root@localhost yum.repos.d]# ifconfig ens33 |grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+"|head -1
192.168.91.100

2, 统计当前主机的连接状态

[root@localhost ~]# ss -nta | grep -v '^State' |cut -d" " -f1|sort |uniq -c

3, 统计当前连接主机数

[root@localhost ~]#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 多点编辑[root@www 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/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
替换修饰符:
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' var=value  file…

1,program组成

program通常是被放在单引号中,并可以由三种部分组成

  • BEGIN语句块

  • 模式匹配的通用语句块

  • END语句块

2,Program格式

xxxxxxxxxx1 11 1pattern{action statements;..}   

  • pattern:决定动作语句何时触发及触发事件,比如:BEGIN,END,正则表达式等

  • action statements:对数据进行处理,放在{}内指明,常见:print, printf

    • output statements:print,printf

    • Expressions:算术,比较表达式等

    • Compound statements:组合语句

    • Control statements:if, while等

    • input statements

3,awk 常见选项:

  • -F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符

  • -v var=value 变量赋值

(四) 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 打多少行

6,awk 可以当计算机

注意,此处 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)           不打                        0+1

第三次            0+1(真)               假(0)              不打                         0+1

第四次             0+1(真)               假(0)              不打                         0+1

所以aa  不论有多少行只打印一次,达到去重的效果

13,提出主机名,再放指定文件夹

第一种方法:awk

第二种方法:cut

第三张方法:sed

14,统计/etc/fstab文件中每个文件系统类型出现的次数

15,统计/etc/fstab文件中   真单词的个数

16 ,  提取一长串乱码中的数字

17,提取  文件权限

方法1:sed

方法2:awk

18,查出uid最大的用户的    uid    用户名  shell类型

这边有个小技巧,awk 提取的时候把 uid放第一列

方便我们后续用 sort  -n 排序

19,打印 1-200  之间所有能被7整除  并且包含数字7   的整数

20,提取内存   使用率

先提出 内存这一行,用使用内存  除   所有内存

取整   并加    %

21 ,看ssh 登录失败(看谁在暴力破解密码)

(六)awk 常见的内置变量

awk   选项

  • -F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符

  • -v var=value 变量赋值

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++  

除了第一行都打印

#解释: 第一次循环n=0 所以不打印  数字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)           不打                        0+1

第三次            0+1(真)               假(0)              不打                         0+1

第四次             0+1(真)               假(0)              不打                         0+1

所以aa  不论有多少行只打印一次,达到去重的效果

(十) awk 模糊匹配

1,用~表示包含

2,!~  表示不包含

相关文章:

正则表达式 与文本三剑客(sed grep awk)

一&#xff0c;正则表达式 &#xff08;一&#xff09;正则表达式相关定义 1&#xff0c;正则表达式含义 REGEXP&#xff1a; Regular Expressions&#xff0c;由一类特殊字符及文本字符所编写的模式&#xff0c;其中有些字符&#xff08;元字符&#xff09;不表示字符字面意…...

【XR806开发板试用】全志 XR806 OpenHarmony 鸿蒙系统固件烧录

大家好&#xff0c;我是极智视界&#xff0c;本教程详细记录了全志 XR806 OpenHarmony 鸿蒙系统固件烧录的方法。 在上一篇文章《【嵌入式AI】全志 XR806 OpenHarmony 鸿蒙系统固件编译》中咱们已经编译生成了系统镜像&#xff0c;这里把这个编译出来的镜像烧录到 XR806 板子里…...

linux环境安装git、maven、jenkins等

重启 jenkins的命令&#xff1a; systemctl start jenkins 如果没有vim 命令 可以使用 yum install vim 安装 vim git 下载包地址 https://www.kernel.org/pub/software/scm/git/git-2.28.0.tar.gz 1.安装依赖环境&#xff1a; yum install -y curl-devel expat-devel ge…...

RabbitMQ快速上手

首先他的需求实在什么地方。我美哟明显的感受到。 它给我的最大感受就是脱裤子放屁——多此一举&#xff0c;的感觉。 他将信息发送给服务端中间件。在由MQ服务器发送消息。 服务器会监听消息。 但是它不仅仅局限于削峰填谷和稳定发送信息的功能&#xff0c;它还有其他重要…...

SpringBoot activemq收发消息、配置及原理

SpringBoot集成消息处理框架 Spring framework提供了对JMS和AMQP消息框架的无缝集成&#xff0c;为Spring项目使用消息处理框架提供了极大的便利。 与Spring framework相比&#xff0c;Spring Boot更近了一步&#xff0c;通过auto-configuration机制实现了对jms及amqp主流框架…...

视频智能识别安全帽佩戴系统-工地安全帽佩戴识别算法---豌豆云

视频智能识别安全帽佩戴系统能够从繁杂的工地、煤矿、车间等场景下同时对多个目标是否戴安全帽穿反光衣进行实时识别。 当视频智能识别安全帽佩戴系统发现作业人员没有戴安全帽、穿反光衣或者戴安全带&#xff0c;系统会及时报警提醒&#xff0c;并抓拍存档。 视频智能识别安…...

指针的深入理解(三)

这一节主要使用复习回调函数&#xff0c; 利用冒泡模拟实现qsort函数。 qsort 排序使用冒泡排序&#xff0c;主要难点在于运用元素个数和字节数以及基地址控制元素的比较&#xff1a; if里面使用了一个判断函数&#xff0c;qsort可以排序任意的数据&#xff0c;原因就是因为可…...

【Linux C | 网络编程】详细介绍 “三次握手(建立连接)、四次挥手(终止连接)、TCP状态”

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

主从数据库MySQL服务重启步骤与注意事项

主从数据库MySQL服务重启步骤与注意事项 实验环境&#xff1a; 172.20.26.34 &#xff08;主应用服务器&#xff09; 172.20.26.26 &#xff08;备应用服务器&#xff09; 172.20.26.37 &#xff08;主库服务器&#xff09; 172.20.26.38 &#xff08;从库服务器&…...

netlink学习

netlink是什么 netlink是Linux内核中的一种进程间通信&#xff08;IPC&#xff09;机制。它允许内核空间与用户空间之间&#xff0c;以及用户空间进程之间进行双向通信。 内核里的很多子系统使用netlink通信&#xff0c;包括网络管理&#xff08;Routing&#xff0c;Netfilt…...

地理空间分析10——空间数据分析中的地理编码与Python

目录 写在开头1. 地理编码基础1.1 地理编码的基本原理1.1.1 坐标系统1.1.2 地名解析1.1.3 编码算法1.2 Python中使用地理编码的基础知识1.2.1 百度地图API1.2.2 高德地图API1.2.3 腾讯地图API1.3 Python中实现代码2. 逆地理编码2.1 利用Python进行逆地理编码2.1.1 获取高德地图…...

使用“快速开始”将数据传输到新的 iPhone 或 iPad

使用“快速开始”将数据传输到新的 iPhone 或 iPad 使用 iPhone 或 iPad 自动设置你的新 iOS 设备。 使用“快速开始”的过程会同时占用两台设备&#xff0c;因此请务必选择在几分钟内都不需要使用当前设备的时候进行设置。 确保你当前的设备已连接到无线局域网&#xff0c;并…...

计算机网络(第六版)复习提纲13

前同步码&#xff0c;七位1010交替出现&#xff0c;帧开始码&#xff1a;10101011 为什么没有帧结束&#xff1f;曼彻斯特码传播完成后&#xff0c;维持高电平&#xff0c;不再跳变&#xff0c;因此不必要设置帧结束。 3.无效的MAC帧 i.数据字段的长度与长度字段的值不一致&…...

[office] excel2010双向条形图制作 #经验分享#微信

excel2010双向条形图制作 本教程为大家介绍一下excel2010中excel2010双向条形图制作方法。 1.选中工作区域 2.点击插入-->图表,选择条形图 3.为美观可将中间竖线可去掉 4.方法是选中竖线,右击-->删除 5.接下来将图例靠上,选中图例,右击-->设置图例格式-->图例选项…...

优雅管理多线程异步任务 - 永动异步任务

引言 在现代应用程序中,经常需要处理长时间运行的异步任务,如消息推送、定时任务等。为了确保这些异步任务能够安全可靠地执行,我们需要一种优雅的管理方式。本文将介绍一种基于线程池的多线程异步任务管理方案,并详细讨论任务的优雅关闭。 1. 多线程异步任务管理的需求 …...

软考笔记--分布式数据库

分布式数据库系统是数据库技术与网络技术相结合的产物&#xff0c;其基本思想是将传统的集中式数据库中的数据分布于网络上的多台计算机中。分布式数据库系统通常使用较小的计算机系统&#xff0c;每台计算机可单独放在一个地方&#xff0c;每台计算机中都有DBMS的一份完整的复…...

vue项目中路由懒加载的三种方式

1 . vue异步组件技术 异步加载 vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 . 但是,这种情况下一个组件生成一个js文件 /* vue异步组件技术 */ { path: /home, name: home, component: resolve > require([/components/home],resolve) }, { path…...

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏6(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言生命 食物 水简单绘制UI玩家状态脚本生命值控制饱食度控制水分控制 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇中…...

Cache Lab:Part A【模拟出使用LRU策略的高速缓存存储器组织结构】

目录 任务描述 知识回顾 实验内容 测试结果 Cache Lab 对应《CS:APP》6.3节至第六章结束的内容。 任务描述 Your job for Part A is to fill in the csim.c file so that it takes the same command line arguments and produces the identical output as the reference …...

操作系统基础:死锁

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;OS从基础到进阶 &#x1f426;1 死锁的概念&#x1f9a2;1.1 总览&#x1f9a2;1.2 什么是死锁&#x1f9a2;1.3 死锁、饥饿、死循环的区别&#x1f427;1.3.1 概念&#x1f427;1.3.2 区别…...

Ubuntu server如何使用 Daphne + Nginx + supervisor部署 Django

Django从 3.0版开始加入对ASGI的支持,使Django开始具有异步功能。 截止目前的5.0版,对异步支持逐步也越来越好,相信在未来的版本中异步将会支持的更加完善。 所以说,我们也需要适时的更新我们的技能,学会在asgi异步服务器环境中部署django项目! 在部署之前我们所有的依…...

Android 12.0 应用中监听系统收到的通知

1. 需求 在系统内置应用中或者在第三方应用中,获取Android系统收到的通知的内容. 2. NotificationListenerService 接口 Android 系统预留了专门的API, 即 NotificationListenerService 接口,它的源码路径为: 源码路径 : /frameworks/base/core/java/android/service/notifi…...

SpringBoot+Redis如何实现用户输入错误密码后限制登录(含源码)

点击下载《SpringBootRedis如何实现用户输入错误密码后限制登录&#xff08;含源码&#xff09;》 1. 引言 在当今的网络环境中&#xff0c;保障用户账户的安全性是非常重要的。为了防止暴力破解和恶意攻击&#xff0c;我们需要在用户尝试登录失败一定次数后限制其登录。这不…...

kotlin中的初始化问题纪录

1. init 代码块的顺序问题 init代码块和成员变量实质上是按先后顺序执行的。若果init{} 中有成员变量使用。要把成员变量放到代码块之前。 2. init代码块之中的函数问题 下面是一段错误的代码&#xff1a; class mkotlin{val info:Stringinit {getInfoMethod()info "adad…...

Web中的转发与重定向

转发与重定向 一、转发和重定向的概念1.转发2.重定向 二、JavaWeb 中的转发和重定向三、SpringMVC 中的转发和重定向1.转发(1) 默认的方式(2) 完整的方式 2.重定向 四、总结 一、转发和重定向的概念 在 Web 应用中&#xff0c;转发和重定向都是用于将请求从一个页面传递到另一…...

交叉注意力融合时域、频域特征的FFT + CNN-Transformer-CrossAttention轴承故障识别模型

目录 往期精彩内容&#xff1a; 前言 1 快速傅里叶变换FFT原理介绍 第一步&#xff0c;导入部分数据 第二步&#xff0c;故障信号可视化 第三步&#xff0c;故障信号经过FFT可视化 2 轴承故障数据的预处理 2.1 导入数据 2.2 制作数据集和对应标签 3 交叉注意力机制 …...

STM32读取MPU6050数据并通过角度值控制舵机运动(STM32、GY-521 MPU6050、SG90舵机、MG946舵机)

通过STM32F103C8T6读取MPU6050数据控制舵机运动&#xff08;STM32、GY-521 MPU6050、SG90舵机、MG946舵机&#xff09; 最终现象一、MPU6050数据读取二、舵机控制原理①什么是PWM&#xff1f;②STM32F103C8T6如何生成PWM&#xff1f;③控制舵机需要什么样的PWM波&#xff1f; 三…...

Unity_Playable工具使用

Unity_Playable工具使用 目录 Unity_Playable工具使用 1. Default Playables(Timeline扩展) 2. PlayableGraph Visualizer&#x...

Flutter canvas 画一条波浪线 进度条

之前用 Flutter Canvas 画过一个三角三角形&#xff0c;html 的 Canvas 也画过一次类似的&#xff0c; 今天用 Flutter Canvas 试了下 感觉差不多&#xff1a; html 版本 大致效果如下&#xff1a; 思路和 html 实现的类似&#xff1a; 也就是找出点的位置&#xff0c;使用二阶…...

Java技术栈 —— Spring MVC 与 Spring Boot

参考文章或视频链接[1] Spring vs. Spring Boot vs. Spring MVC[2] Key Differences Between Spring vs Spring Boot vs Spring MVC...