正则表达式与文本三剑客grep、sed、awk
目录
一、正则表达式
1.1、字符匹配
1.2、次数匹配
1.3、位置锚定
1.4、分组或其他
二、扩展正则表达式
三、grep
四、awk
4.1、常用命令选项
4.2、工作原理
4.3、基础用法
4.4、内置变量
4.5、模式
4.6、条件判断
4.7、awk中的循环语句
4.8、数组
4.9、脚本
五、sed
5.1、sed脚本格式
5.2、sed命令
5.3、搜索替换
5.4、分组后向引用
一、正则表达式
正则表达式,又称规则表达式。(英语:Regular Expression),在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式不只有一种,而且linux中不同的程序可能会使用不同的正则表达式,如:grep sed awk egrep
LINUX 中常用的有两种正则表达式引擎:
- 基础正则表达式:BRE
- 扩展正则表达式: ERE
通配符与正则表达式的区别:
- 通配符一般用于文件名匹配
- 正则表达式一般用于匹配文件内容
1.1、字符匹配
元字符 | 定义 |
. | 匹配除换行符\n之外的任意单个字符 |
[ ] | 匹配中括号内任意单个字符 |
[^ ] | 匹配除中括号内任意单个字符 |
[:alnum:] | 数字和字母 |
[:alpha:] | 任意大小写英文字符 |
[:lower:] | 小写字母 |
[:upper:] | 大写字母 |
[:blank:] | 空白字符(空格和制表符) |
[:space:] | 空格、制表符、换行符、回车符等空白 |
[:cntrl:] | 不可打印的控制字符(退格、删除、警铃等) |
[:digit:] | 十进制数字 |
[:xdigit:] | 十六进制数字 |
[:graph:] | 可打印的非空白字符 |
[:print:] | 可打印字符 |
[:punct:] | 标点符号 |
\w | 匹配单词 |
\W | |
\s | |
\S |
1.2、次数匹配
元字符 | 定义 |
* | 匹配前面字符人任意次,包括0次 |
.* | 任意长度的任意字符,不包括0次 |
\? | 匹配前面字符出现0次或1次 |
\+ | 前面字符出现最少1次 |
\{n\} | 匹配前面字符n次 |
\{m,n\} | 匹配前面字符最少m次,最多n次 |
\{,n\} | 匹配前面字符最多n次,≤n |
\{n,\} | 匹配前面字符最少n次 |
1.3、位置锚定
元字符 | 定义 |
^ | 行首锚定,用于模式最左侧 |
$ | 行尾锚定,用于模式最右侧 |
^PATTTERN$ | 匹配整行 |
^$ | 空行,不包括空格行 |
^[:space:]*$ | 空白行 |
\b,\< | 词首锚定,用于模式最左侧 |
\b,\> | 词尾锚定,用于模式最右侧 |
1.4、分组或其他
元字符 | 定义 |
( ) | 分组,将多个字符作为一个整体 |
(x\|y) | 由左向右匹配指定字符 |
二、扩展正则表达式
通常情况下会使用基础正则表达式就已经足够了,但有时为了简化整个指令,需要使用 范围更广的扩展正则表达式。
#次数匹配
* #前面任意字符
? #0或1次
+ #1次以上
{n} #匹配n次
{m,n} #最少m次,最多n次
{,n} #前面字符最多n次,≤n
{n,} #前面字符最少n次
#分组匹配
() #多个字符当作整体处理
\1,\2,... #向后引用
| #或
三、grep
语法格式:grep 参数 文件名
常用参数:
-m<x> | 找到x行后停止查找 |
-v | 取反 |
-i | 忽略大小写 |
-n | 显示行号 |
-c | 统计行数 |
-o | 仅显示匹配到的字符 |
-q | 静默模式,不输出任何信息 |
-A<x> | 显示匹配行,及之后的x行 |
-B | 显示匹配行,及之前的x行 |
-C | 显示匹配行,及前后x行 |
-e | 多个选项间的逻辑或 |
-E | 使用扩展正则表达式 |
-w | 只显示全字符合的列 |
-F | 不使用正则表达式 |
-f | 处理两个文件相同内容,以第一个文件为匹配条件 |
-r | 递归目录,不处理软链接 |
-R | 递归目录,处理软连接 |
--color=auto | 高亮匹配字符 |
参考示例
#输出除之外的所有行 -v 选项
grep -v "match_pattern" file_name#标记匹配颜色 --color=auto 选项
grep "match_pattern" file_name --color=auto#使用正则表达式 -E 选项:
grep -E "[1-9]+"
egrep "[1-9]+"#选项 -e 制动多个匹配样式:
echo this is a text line | grep -e "is" -e "line" -o
is
is
line#在多级目录中对文本进行递归搜索:
grep "text" . -r -n
# .表示当前目录。#忽略匹配样式中的字符大小写:
echo "hello world" | grep -i "HELLO"
# hello
四、awk
awk命令来自三位创始人Alfred Aho、Peter Weinberger、Brian Kernighan的姓氏缩写,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。
它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
语法格式:awk [选项] -f '脚本'/脚本文件 '模式{处理动作}'
4.1、常用命令选项
- -F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:,默认的分隔符是连续的空格或制表符
- -v var=value 赋值一个用户定义变量,将外部变量传递给awk
- -f scripfile 从脚本文件中读取awk命令
- -m[fr] val 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
4.2、工作原理
- 第一步:执行 BEGIN {commands} 语句块中的语句;
- 第二步:从文件或标准输入(stdin)读取一行,然后执行 pattern {commands} 语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
- 第三步:当读至输入流末尾时,执行 END {commands} 语句块。
BEGIN语句块:在awk开始从输入流中读取行 之前 被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。
END语句块:在awk从输入流中读取完所有的行 之后 即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。
pattern语句块:中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{print},即打印每一个读取到的行,awk读取的每一行都会执行该语句块。
4.3、基础用法
awk '模式{处理动作}'
#BGEIN{}模式
[root@localhost ~]# awk '{print}'
1
1
aabb
aabb
^C
[root@localhost ~]# awk '{print "aabb"}'
1
aabb#提取磁盘的分区利用率
[root@localhost ~]# df |awk '{print $5}'
已用%
0%
0%
2%
0%
80%
19%
1%
80%
0%#提取用户名和uid号
[root@localhost ~]# cat /etc/passwd |awk -F: '{print $1,$3}'
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
..............#提取ip地址
[root@localhost ~]# ifconfig ens33 |awk 'NR==2{print $2}'
192.168.153.23
4.4、内置变量
变量 | 定义 |
FS | 字段分隔符(默认空格) |
OFS | 输出字段分隔符(默认空格) |
NF | 字段数,执行过程中对应当前字段数 |
NR | 记录数,执行过程中对应当前行号 |
$0 | 当前处理的行的整行内容 |
$n | 当前处理行的第n个字段/列 |
FILENAME | 当前输入的文件名 |
RS | 记录分隔符(默认一个换行符) |
参考示例
#FS变量的使用,-F优先级高于FS变量
[root@localhost ~]# awk -v "FS=:" '{print $1FS$3}' /etc/passwd
root:0
bin:1
daemon:2
[root@localhost ~]# awk -F: '{print $1":"$3}' /etc/passwd
root:0
bin:1
daemon:2#OFS变量的使用,替换分隔符
[root@localhost ~]# cat /etc/passwd|awk -v "OFS=--" -F: '{print $1,$3}'|head -n3
root--0
bin--1
daemon--2
[root@localhost ~]# cat /etc/passwd|awk -v "OFS=--" -v "FS=:" '{print $1,$3}'|head -n3
root--0
bin--1
daemon--2#RS变量的使用,替换分隔符为换行符
[root@localhost ~]# echo $PATH|awk -v "RS=:" '{print}'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin#NF变量的使用,显示最后一列
[root@localhost ~]# df |awk '{print $NF}'
挂载点
/dev
/dev/shm
/run
/sys/fs/cgroup
/
/boot
/run/user/42
/var/lib/docker/overlay2/b3191762ed94dc8a583e6da75d8db197b583d63c7f925833df49e5b51e865a4f/merged
/run/user/0
[root@localhost ~]# df |awk '{print $(NF-1)}'
已用%
0%
0%
2%
0%
80%
19%
1%
80%
0%#NR变量的使用,匹配对应行
[root@localhost ~]# cat /etc/passwd |head -n3|awk '{print NR,$0}'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# cat /etc/passwd|awk 'NR==1,NR==3{print NR,$0}'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# cat /etc/passwd|head -n8|awk '(NR%2)==0{print NR,$0}'
2 bin:x:1:1:bin:/bin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
8 halt:x:7:0:halt:/sbin:/sbin/halt
4.5、模式
awk [选项] '模式{处理动作}'
#/正则表达式/:使用通配符的扩展集。
#匹配从root开头,ftp结尾的行
[root@localhost ~]# awk -F: '/^root/,/^ftp/{print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
#仅匹配root开头,ftp开头的行
[root@localhost ~]# awk -F: '/^root/||/^ftp/{print $1,$3}' /etc/passwd
root 0
ftp 14
#关系表达式,使用运算符进行操作,可以是字符串或数字的比较测试
#n++表示不匹配第一行,即NR!=1
[root@localhost ~]# ss -natp|awk 'n++{print $1}'|sort|uniq -c1 ESTAB12 LISTEN
[root@localhost ~]# ss -natp|awk 'n++{a[$1]++}END{for(i in a){print a[i],i}}'
12 LISTEN
1 ESTAB[root@localhost ~]# seq 4|awk 'i=!i'
1
3
[root@localhost ~]# seq 4|awk '!(i=!i)'
2
4
[root@localhost ~]# seq 4|awk -v i=1 'i=!i'
2
4
4.6、条件判断
awk 选项 '模式 {条件|执行动作}'
#过滤用户名及uid
[root@localhost ~]# cat /etc/passwd|awk -F: '{if($3>1000)print $1,$3}'
nfsnobody 65534
[root@localhost ~]# cat /etc/passwd|awk -F: '$3>1000{print $1,$3}'
nfsnobody 65534
[root@localhost ~]# cat /etc/passwd|awk -F: '{if($3>=uid){uid=$3;user=$1;sh=$NF}}END{print user,uid,sh}'
nfsnobody 65534 /sbin/nologin
4.7、awk中的循环语句
#for循环
#for(变量;条件;表达式){语句}
[root@localhost ~]# awk 'BEGIN{total=0;for(i=0;i<=100;i++){total+=i;}print total;}'
5050
4.8、数组
数组是awk的灵魂,处理文本中最不能少的就是它的数组处理。因为数组索引(下标)可以是数字和字符串在awk中数组叫做关联数组(associative arrays)。awk 中的数组不必提前声明,也不必声明大小。数组元素用0或空字符串来初始化,这根据上下文而定。
#得到数组长度
#length返回字符串以及数组长度,split进行分割字符串为数组,也会返回分割得到数组长度
[root@localhost ~]# awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}'
4 4#输出数组内容
#无序输出
[root@localhost ~]# awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'
4 test
1 it
2 is
3 a
#有序输出
[root@localhost ~]# awk 'BEGIN{info="it is a test";tlen=split(info,tA," ");for(k=1;k<=tlen;k++){print k,tA[k];}}'
1 it
2 is
3 a
4 test
4.9、脚本
-f scripfile 从脚本文件中读取awk命令
[root@localhost opt]# vim asdf.txt
{if($3>=1000)print $1,$3}
[root@localhost opt]# awk -F: -f asdf.txt /etc/passwd
nfsnobody 65534
123123 1000
五、sed
stream editor的缩写,其功能是利用语法/脚本对文本文件进行批量的编辑操作。
它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。
Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
语法格式:sed [选项] '命令' 文件名
常用参数:
-n | 就显示脚本处理后的结果 |
-e | 使用指定脚本处理输入的文本文件 |
-f | 使用指定脚本文件处理输入的文本文件 |
-r/-E | 支持扩展正则表达式 |
-i.bak | 直接修改文件内容而不输出到终端,并备份文件 |
[root@localhost opt]# sed -n -e '/^r/p' -e'/^b/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin[root@localhost opt]# sed -i.bak '1,4d' aaa #删除第1,第4行
[root@localhost opt]# cat aaa
eeeee
fffff
ggggg
hhhhh
[root@localhost opt]# cat aaa.bak
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
hhhhh
5.1、sed脚本格式
#范围匹配
[root@localhost opt]# seq 5|sed -n 'p' #不指定范围则打印全文
1
2
3
4
5
[root@localhost opt]# seq 5|sed -n '3p' #打印第3行
3
[root@localhost opt]# seq 5|sed -n '1,3p' #打印第1,第3行
1
2
3
[root@localhost opt]# seq 5|sed -n '1,+2p' #打印第1行及后2行
1
2
3
[root@localhost opt]# seq 5|sed -n '1,2!p' #取反
3
4
5
#步进
#打印第一行起,后每步进2打印一行,即奇数行
[root@localhost opt]# seq 10|sed -n '1~2p'
1
3
5
7
9
#打印第二行起,后每步进2打印一行,即偶数行
[root@localhost opt]# seq 10|sed -n '2~2p'
2
4
6
8
10
#第二行起,每三行步进打印
[root@localhost opt]# seq 10|sed -n '2~3p'
2
5
8
#第三行起,每三行步进打印
[root@localhost opt]# seq 10|sed -n '3~3p'
3
6
9
5.2、sed命令
p | 打印模板块的行 |
q | 退出Sed |
s | 替换指定字符 |
d | 删除,删除选择的行 |
a | 在当前行下面插入文本 |
i | 在指定行上面插入文本 |
c | 把选定的行改为新的文本 |
y | 把一个字符翻译为另外的字符 |
= | 打印当前行号 |
r | 从file中读行 |
w | 写并追加模板块到file末尾 |
! | 取反 |
#打印到第三行退出
[root@localhost ~]# cat /etc/passwd|sed '3q'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin#指定行后插入
[root@localhost ~]# seq 5|sed '2alook'
1
2
look
3
4
5
[root@localhost ~]# seq 5|sed '4alook\n eyes'
1
2
3
4
lookeyes
5
[root@localhost ~]# seq 5|sed '4alook\neyes'
1
2
3
4
look
eyes
5
[root@localhost ~]# seq 5|sed '3a look'
1
2
3
look
4
5
[root@localhost ~]# seq 5|sed '3a\ look'
1
2
3look
4
5#指定行前插入
[root@localhost ~]# seq 5|sed '3i\ look'
1
2look
3
4
5
[root@localhost ~]# seq 5|sed '4ilook\neyes'
1
2
3
look
eyes
4
5#替换行
[root@localhost ~]# seq 5|sed '3c\ look'
1
2look
4
5
[root@localhost ~]# seq 5|sed '4clook\neyes'
1
2
3
look
eyes
5
5.3、搜索替换
替换标记 | 定义 |
g | 行内全面替换 |
p | 打印行 |
w | 把行写入一个文件 |
x | 互换模板块中的文本和缓冲区中的文本 |
y | 把一个字符翻译为另外的字符 |
\1 | 子串匹配标记 |
& | 已匹配字符串标记 |
基本格式 s/pattern/string/修饰符
#替换第二个.为@
[root@localhost opt]# sed 's/\./@/2' /etc/hosts
127.0@0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6@localdomain6#匹配字符后添加
[root@localhost opt]# sed -n 's/r..t/&er/gp' /etc/passwd
rooter:x:0:0:rooter:/rooter:/bin/bash
operator:x:11:0:operator:/rooter:/sbin/nologin
ftp:x:14:50:FTP User:/var/fterp:/sbin/nologin
5.4、分组后向引用
#提取ip地址
[root@localhost opt]# ifconfig ens33|sed -rn '2s/.*inet ([0-9.]+) .*/\1/p'
192.168.153.23#提取文件权限
[root@localhost opt]# stat aaa文件:"aaa"大小:24 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:18799731 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2025-05-02 21:53:35.697373969 +0800
最近更改:2025-05-02 21:53:24.391268086 +0800
最近改动:2025-05-02 21:53:24.391268086 +0800
创建时间:-
[root@localhost opt]# stat aaa |sed -nr '4s/.*([0-9]{4}).*/\1/p'
0644
[root@localhost opt]# stat aaa|sed -n '4p'|egrep -o "[0-9]{4}"
0644
[root@localhost opt]# stat aaa|awk -F"[(/]" 'NR==4{print $2}'
0644
相关文章:
正则表达式与文本三剑客grep、sed、awk
目录 一、正则表达式 1.1、字符匹配 1.2、次数匹配 1.3、位置锚定 1.4、分组或其他 二、扩展正则表达式 三、grep 四、awk 4.1、常用命令选项 4.2、工作原理 4.3、基础用法 4.4、内置变量 4.5、模式 4.6、条件判断 4.7、awk中的循环语句 4.8、数组 4.9、脚本 …...
(35)VTK C++开发示例 ---将图片映射到平面2
文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容👉内容导航 👈👉VTK开发 👈 1. 概述 与上一个示例不同的是,使用vtkImageReader2Factory根据文件扩展名或内容自动创建对应的图像文件读取器&a…...
每日一题洛谷P8635 [蓝桥杯 2016 省 AB] 四平方和c++
P8635 [蓝桥杯 2016 省 AB] 四平方和 - 洛谷 (luogu.com.cn) 直接暴力枚举,不做任何优化的话最后会TLE一个,稍微优化一下就过了(数据给的还是太良心了) 优化:每层循环用if判断一下,如果大于n就直接跳 当然…...
【python】【UV】一篇文章学完新一代 Python 环境与包管理器使用指南
🐍 UV:新一代 Python 环境与包管理器使用指南 一、UV 是什么? UV 是由 Astral 团队开发的高性能 Python 环境管理器,旨在统一替代 pyenv、pip、venv、pip-tools、pipenv 等工具。 1.1 UV 的主要功能 🚀 极速包安装&…...
6.10.单源最短路径问题-Dijkstra算法
一.BFS算法的局限性: 如上图,BFS算法可以解决无权图的单源最短路径问题, 如果是解决带权图的单源最短路径问题,BFS算法就不适用了,如下图: 如上图,比如求G港到其他顶点的最短路径, …...
Python基于深度学习的网络舆情分析系统(附源码,部署)
大家好,我是Python徐师兄,一个有着7年大厂经验的程序员,也是一名热衷于分享干货的技术爱好者。平时我在 CSDN、掘金、华为云、阿里云和 InfoQ 等平台分享我的心得体会。 🍅文末获取源码联系🍅 2025年最全的计算机软件毕…...
mysql--索引
索引作为一种数据结构,其用途是用于提升检索数据的效率。 分类 普通索引(INDEX):索引列值可重复 唯一索引(UNIQUE):索引列值必须唯一,可以为NULL 主键索引(PRIMARY KEY&a…...
【算法题】荷兰国旗问题[力扣75题颜色分类] - JAVA
一、题目 二、文字解释 1.1 前言 本题是经典的「荷兰国旗问题」,由计算机科学家 Edsger W. Dijkstra 首先提出。如同图中所示的荷兰国旗,其由红、白、蓝三色水平排列组成。在算法领域,该问题可类比为将一个由特定的三种元素(可…...
【数据结构】堆的完整实现
堆的完整实现 堆的完整实现GitHub地址前言堆的核心功能实现重温堆的定义堆结构定义1. 堆初始化与销毁2. 元素交换函数3. 堆化操作向上调整(子→父)向下调整(父→子) 4. 堆元素插入5. 堆元素删除6. 辅助功能函数堆的判空获取堆顶元…...
软考 系统架构设计师系列知识点之杂项集萃(51)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(50) 第80题 设三个煤场A1、A2、A3分别能供应煤7、12、11万吨,三个工厂B1、B2、B3分别需要10、10、10万吨,从各煤场到各工厂运煤的单价(百元/吨&…...
patch命令在代码管理中的应用
patch 是一个用于将差异文件(补丁)应用到源代码的工具,常用于修复 bug、添加功能或调整代码结构。在您提供的代码中,patch 命令通过一系列补丁文件(.patch)修改了 open-amp 库的源代码。 patch 命令的核心作…...
Qt结构体运算符重载指南
在 Qt 中,结构体(struct)或类(class)中重载运算符是一种常见的做法,用于实现自定义类型的逻辑操作(如比较、算术运算等)。以下是一些常见的运算符重载示例和注意事项: 1.…...
基于bert预训练模型的垃圾短信分类系统
文章目录 任务介绍数据说明注意事项数据处理数据准备数据集划分数据集类构建模型构建与训练模型构建模型训练模型推理附录任务介绍 随着移动通信技术的飞速发展,短信(Short Message Service, SMS)已成为人们日常生活中不可或缺的沟通方式之一。然而,垃圾短信(Spam SMS)的…...
[Android] 网易爆米花TV 2.0.0.0429(原网易Filmly,支持多网盘的TV版、电脑版带海报墙播放器)
[Android] 网易爆米花 链接:https://pan.xunlei.com/s/VOPDuQS9D7qixvAnoy7-he2PA1?pwdhzvh# [Android] 网易爆米花TV 2.0.0.0429(原网易Filmly,支持多网盘的TV版、电脑版带海报墙播放器) 详细介绍直接上主页截图,…...
# 前后端分离象棋对战项目开发记录
1. **结构清晰**:使用更直观的标题、分段和列表,增强可读性。 2. **视觉美观**:添加Markdown格式化(如代码块、加粗、斜体),并建议配色和排版风格。 3. **内容精炼**:精简冗余表述,突…...
Android Framework学习二:Activity创建及View绘制流程
文章目录 Window绘制流程Window Manager Service(WMS)SurfaceSurfaceFlinger 安卓View层次结构ActivityPhoneWindowActivity与PhoneWindow两者之间的关系ViewRootImplDecorViewDecorView 的作用DecorView 的结构总结 Activity创建流程View invalidate调用…...
文章五《卷积神经网络(CNN)与图像处理》
文章5:卷积神经网络(CNN)与图像处理——让AI学会"看图说话" 引言:你的AI宠物如何认出猫狗? 想象你的手机突然有了"眼睛",不仅能识别照片里的猫狗,还能告诉你它们的品种&am…...
Ubuntu系统下Firefox浏览器完整指南:故障修复、国内版安装与下载加速
Ubuntu系统下Firefox浏览器完整指南:故障修复、国内版安装与下载加速 一、Firefox无法启动问题修复二、替换国际版安装国内版完整流程准备工作操作步骤验证要点 三、下载延迟问题解决方案现象分析优化配置步骤注意事项 四、进阶技巧补充五、常见问题FAQ 一、Firefox…...
【论文阅读一】掌握高效阅读法,开启学术研究新旅程:S. Keshav教授论文阅读的三遍法
文章目录 一、三遍阅读法1. 初读:10分钟:宏观把握,快速筛选2. 第二遍:1个小时:更仔细的阅读,了解文中论点3. 第三遍:深入理解,注重细节,挑战假设 二、运用三遍阅读法进行…...
多线程编程的常见问题
目录 1. 线程安全和可重入函数问题 2. 死锁的理解 2.1 死锁的概念 2.2 死锁的四个必要条件 3. C中STL容器的线程安全问题 4. C中智能指针的线程安全问题 1. 线程安全和可重入函数问题 线程安全:线程安全是指在多线程环境下,一个函数或者一段代码可…...
算法篇(九)【滑动窗口】
如果在分析一道算法题的时候,发现使用的两个 ”双指针“ , 都是同向的 , 不回退的 , 且一直都在维护 “一段连续的区间” , 此时我们可以考虑使用 “滑动窗口” ! 一、长度最小的子数组 209. 长度最小的子…...
【AI面试准备】传统测试工程师Prompt Engineering转型指南
介绍技能转型:传统测试工程师需掌握Prompt Engineering优化AI输出。如何快速掌握,以及在实际工作中如何运用。 传统测试工程师向AI时代的技能转型,掌握Prompt Engineering(提示工程)已成为提升工作效率、适应智能化测…...
数字智慧方案6186丨智慧应急指挥解决方案(43页PPT)(文末有下载方式)
资料解读:智慧应急指挥解决方案 详细资料请看本解读文章的最后内容。 在当今社会,各类突发事件频发,应急管理工作面临着巨大挑战。智慧应急指挥解决方案应运而生,旨在提升应急管理的效率和水平,保障人民生命财产安全。…...
d202552-sql
一、184. 部门工资最高的员工 - 力扣(LeetCode) 要找到每个部门工资最高的 使用窗口函数 加排序函数 排序函数用rank dense_rank都行 把最高相同的找出来就行 select *, dense_rank() over(partition by departmentId order by Salary desc) as rank …...
cpper 转 java
快速上手 java 特性 文章目录 java 语言特点JVM工作过程组成 java 语言特点 Java 程序编译成字节码,然后由 Java 虚拟机(JVM)执行 不同平台适配相同的 JVM ,从而使得 Java 程序具备跨平台性 —— 一次编写,到处运行 …...
PostgreSQL常用函数
常用函数 数值函数 名称作用AVG(col)列的平均值COUNT(col)列的行数MAX(col)列的最大值MIN(col)列的最小值SUM(col)列值求和 字符串函数 名称作用LENGTH(str)计算字符串长度CONCAT(str1,str2)合并字符串LTRIM(col,str)从字串string的开头删除只包含str(默认空白LTRIM(col))R…...
P2196 [NOIP 1996 提高组] 挖地雷
P2196 [NOIP 1996 提高组] 挖地雷 - 洛谷 题目描述 在一个地图上有N(N ≤ 20)个地窖,每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径。当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷&#…...
截图软件、画图软件、左右分屏快捷键
截图软件 画图软件 画图时候按字母可以改变颜色:红色r,蓝色b,绿色g,粉色p,橙色o 左右分屏:...
小刚说C语言刷题—1018三角形类别
1.题目描述 输入三个整数,以这三个数为边长,判断是否构成三角形;若不能输出 no 。 若构成三角形,进一步判断它们构的是:锐角三角形或直角三角形或钝角三角形。 分别输出 ruijiao , zhijiao , dunjiao 。 输入 三个…...
【Linux】PetaLinux开发
使用Xilinx的PetaLinux工具编译用于Zynq7020的Linux. 部分图片和经验来源于网络,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。 专栏目录:记录自己的嵌入式学习之路-CSDN博客 目录 1 一般开发流程 2 离线编译过程 3 系统根文…...
【计算机网络网络层深度解析】从IP协议到路由优化
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心实验实现实验1:IPv6地址配置实验2:OSPF路由配置实验3:NAT转换验证 运行…...
第 12 届蓝桥杯 C++ 青少组中 / 高级组省赛 2021 年真题
一、选择题 第 1 题 题目:下列符号中哪个在 C++ 中表示行注释 ( )。 A. ! B. # C. ] D. // 正确答案:D 答案解析: 在 C++ 中,//用于单行注释(行注释),从//开始到行末的内容会被编译器忽略。选项 A(!)、B(#)、C(])均无注释功能,其中#常用于预处理指令(如#inclu…...
【quantity】5 derive_more库 2.0 版介绍
derive_more 是一个 Rust 过程宏库,旨在通过派生宏自动生成常见 trait 的实现,减少样板代码。2.0 版本带来了多项改进和新特性。 主要特性 1. 支持的 Trait 派生 derive_more 2.0 支持派生以下 trait: 基本操作 trait: Display - 格式化显…...
Qt编译报错:Unexpected compiler version, expected Clang 18.0.0 or newer——Qt安装MSVC编译器
截止到本人所使用的Qt6.6.3为止,Qt尚不支持MSVC2022编译器的默认编译器配制。所以,在Qt构建套件中使用MSVC编译器的话,可能仍需要调整Visual Studio版本,或者手动设置MSVC编译器。 如果你的系统安装的是Visual Studio2022&#x…...
(转)角色与动画的性能优化 | UnrealFest演讲干货
八、蓝图 8.1. Tick 优化的重点关注对象——Tick事件。在不需要的情况下,请默认关闭Tick。 在蓝图中Actor上关掉还不行,Component也需要关掉。 在CPP中,我们可以从PrimaryActorTick或PrimaryComponentTick中关闭Tick。 如果需要Tick&…...
小程序云开发-环境配置
如果点 云开发 没有反应,需要修改软件安装目录不要有中文,但软件名可以是中文: 首次使用,会送1个月的云开发,配置后要等10分钟以后,才可以使用 如果不能选择环境,关掉重新打开一次。 然后记…...
【c++】【STL】priority_queue详解
目录 priority_queue的作用priority_queue的接口构造函数emptysizetoppushpopswap priority_queue的实现仿函数(函数对象)是什么?向上调整算法(adjustup)向下调整算法(adjustdown)迭代器构造pus…...
C语音中的三元运算符
一、三元运算符的基本语法 三元运算符,也被称为条件运算符,是 C 语言中唯一有三个操作数的运算符。它的语法格式为:condition ? expression1 : expression2。从语法结构可以看出,三元运算符由一个条件表达式和两个普通表达式组…...
C++模板知识
目录 引言 一、非类型模板参数 二、类模板的特化 (一)概念 (二)函数模板特化 (三)类模板特化 1. 全特化 2. 偏特化 (四)类模板特化应用示例 三、模板的分离编译 …...
MCP 探索:微软 Microsoft MarkItDown MCP ,可把 Word、Excel 等转换成 MarkDown 格式
简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 MCP 探索:微软 Microsoft MarkItDown MCP ,可把 Word、Excel 等转换成 MarkDown 格式…...
文本中地理位置提取方法—正则和NLP模型
这里写目录标题 一、提取地址列后12个字二、正则表达式删除不需要的文本三、保留关键字并删除之后的字四、相似度计算,查重五、去重 大量的文本中识别数据,要充分考虑效率和准确率。本文的方案是通过正则和NLP门址模型联合识别的方案。 首先利用现有粗略…...
AI大模型-RAG到底能做些什么?
RAG常见的应用场景,有以下几个方面: 1.智能客服系统:比如电商领域,对客户提出的常见问题,进行自动回复。减少人力成本。 2.人力资源管理:一个新的员工,入职一家大型公司,公司中有各…...
【算法基础】冒泡排序算法 - JAVA
一、算法基础 1.1 什么是冒泡排序 冒泡排序是一种简单直观的比较排序算法。它重复地走访待排序的数列,依次比较相邻两个元素,如果顺序错误就交换它们,直到没有元素需要交换为止。 1.2 基本思想 比较相邻元素:从头开始…...
Nginx搭建test服务器
创建test域名 进入阿里云添加解析 创建域名:test.xxxxx.com 服务器复制项目代码 新建目录,Git拉取项目代码,安装上插件包 修改配置文件,启动测试服务 修改配置文件“服务器接口” 开启服务pm2 start app.js --name "t…...
依赖倒置原则
当然可以!这次我们来详细讲解 依赖倒置原则(DIP: Dependency Inversion Principle),它是 SOLID 五大设计原则中的压轴,也是最关键的“架构型原则”。 我将从: 什么是依赖倒置原则(定义&#x…...
PostgreSQL 的 VACUUM 与 VACUUM FULL 详解
PostgreSQL 的 VACUUM 与 VACUUM FULL 详解 一、基本概念对比 特性VACUUMVACUUM FULL定义常规维护操作,清理死元组激进重组操作,完全重写表数据锁级别不阻塞读写(共享锁)排他锁(阻塞所有操作)空间回收只标记空间为可用,不返还OS空间返还操作…...
SQL面试题——留存分析之使用bitmap 计算留存
使用bitmap 计算留存 之前我们说过,留存分析其实在企业数据分析中,是很基础但是也很重要的,留存分析可以反映产品的发展是否健康,是否可持续发展,之前我们介绍过,可以看看之前的文章 SQL面试题——留存分析 因为使用工具的限制,所以我们实现方式也会有所不同,之前我们…...
P2415集合求和 题解
P2415 集合求和 题解 公式推导: 设集合有 n 个元素,记为 a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,…,an。 每个子集要么包含某个元素,要么不包含。 我们固定某个元素 a k a_k ak,再从剩下的 n − 1 n -…...
【2025年五一数学建模竞赛】C题 完整论文 模型建立与求解
目录 2025年五一数学建模竞赛 C题完整论文:建模与求解 Matlab代码一、问题重述二、模型假设与符号说明2.1 模型基本假设2.2 符号说明 问题一:预测博主新增关注数问题二:预测用户的新关注行为问题三:预测用户在线状态及互动博主问题…...
wpf 输入框 在输入时去除水印
wpf ScrollViewer 在输入数据时去除水印 在WPF(Windows Presentation Foundation)中,ScrollViewer控件通常用于显示滚动内容。如果你想在ScrollViewer中使用数据输入(例如文本输入),并且希望在输入时去除水…...