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

Linux_Shell三剑客grep,awk,sed-08

三剑客的概述:

awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。

一:grep命令

grep命令是一种文本搜索工具,他能使用正则表达式搜索文本,并把匹配的行打印出来,grep的全称是Golobal Regular Expression Print表示全局正则表达式版本,它的使用权限是所有用户.

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

1.1 基本语法        

grep [选项] 模式 [文件...]# 管道命令一起
命令 | grep xxxx
  • 模式:你想要在文件中搜索的文本或正则表达式。
  • 文件...:你想要搜索的文件列表。如果省略文件名,grep 会从标准输入(通常是键盘输入或另一个命令的输出)中读取数据。

常用选项

常用选项释义
-i忽略大小写进行匹配。
-v反向查找,只打印不匹配的行。
-n显示匹配行的行号。
-r递归查找子目录中的文件。
-l只打印匹配的文件名。
-c只打印匹配的行数。
-w只匹配整个单词,而不是部分匹配。
-o只显示匹配的部分,而不是整行。
-A n显示匹配行及后面n行的内容。
-B n显示匹配行及前面n行的内容。
-C n显示匹配行及前后各n行的内容。
-e pattern指定多个匹配模式。
-E使用扩展正则表达式进行匹配。
-F将模式视为固定字符串而不是正则表达式。

1.2 使用举例 

示例1

准备test

# -A2 7 的效果就是找到 7 ,然后输出 2 后面两行
[root@localhost ~]# grep -A2 7 test# -B2 7找到 7 ,然后输出 2 前面两行
[root@localhost ~]# grep -B2 7 test

 


#查找test中的aaa
[root@localhost ~]# grep -c aaa test# -i:忽略大小写
[root@localhost ~]# grep -i aaa test# -n:显示匹配的行号
[root@localhost ~]# grep -n -i aaa test

# -c:输出匹配到的共计行数
[root@localhost ~]# grep -c aaa test#-n:输出匹配到的这些行的内容以及它们各自的行号。
[root@localhost ~]# grep -n aaa test

# -e:实现多个匹配之间的或关系,查找包含aaa或者bbb的
[root@localhost ~]# grep -e aaa -e bbb test

 

grep -F

grep -F相当于fgrep命令,就是将pattern视为固定字符串。

grep命令中的-F选项用于将搜索模式视为固定字符串(fixed strings),而不是正则表达式(regular expressions)。这意味着grep在搜索时不会将搜索模式中的特殊字符(如.*?[]^$\{\}|\()等)视为正则表达式的元字符,而是将它们视为普通字符。

使用-F选项可以加快搜索速度,特别是当你知道搜索模式不包含任何正则表达式元字符,或者你不希望grep对这些字符进行特殊处理时。

例如,如果你有一个文件example.txt,内容如下:

hello.world  
hello*world  
hello?world  
hello[world

如果你想要搜索包含hello*world这个确切字符串的行(注意这里的*是普通字符,不是正则表达式中的“零个或多个前面字符”的意思),你可以使用grep -F来实现:

grep -F "hello*world" example.txt

这个命令会输出:

hello*world

如果你不使用-F选项,grep会将*视为正则表达式元字符,并尝试匹配零个或多个o字符,这可能会导致不同的结果,具体取决于文件内容。

总结来说,-F选项让grep将搜索模式视为纯文本字符串,不进行正则表达式的特殊字符处理。这在处理包含正则表达式元字符的文本时非常有用,尤其是当你想要搜索这些元字符本身时。

grep -f

grep命令中的-f选项允许你从一个文件中读取正则表达式模式,而不是直接在命令行中指定它们。这意味着你可以将多个搜索模式保存在一个文件中,然后使用grep -f选项和该文件作为输入来搜索目标文件中的匹配项。

使用-f选项时,你需要在文件中每行指定一个搜索模式。当grep运行时,它会读取这个文件中的每一行,并将其视为一个搜索模式,然后在目标文件中查找这些模式的匹配项。

这个选项在处理多个搜索模式时非常有用,特别是当这些模式太复杂或太多,以至于直接在命令行中指定它们会变得不切实际时。

例如,假设你有一个名为patterns.txt的文件,内容如下:

error  
warning  
notice

这个文件包含了你想要在另一个文件(比如logfile.txt)中搜索的三个模式。你可以使用以下命令来搜索这些模式:

grep -f patterns.txt logfile.txt
这个命令会搜索logfile.txt文件中所有包含error、warning或notice的行,并将它们打印出来。

请注意,patterns.txt文件中的每一行都被视为一个独立的正则表达式,因此你可以在其中包含正则表达式的特殊字符(尽管这可能会使模式匹配变得更加复杂)。但是,如果你只是想进行简单的文本匹配,并且不希望grep将文件中的特殊字符视为正则表达式元字符,你可以结合使用-F-f选项,但请注意,-F选项实际上会覆盖对正则表达式元字符的特殊处理,因此它可能不是你想要的效果(除非你真的只想进行纯文本匹配)。如果你想要从文件中读取模式,但又不希望这些模式中的特殊字符被解释为正则表达式,你可能需要手动转义这些特殊字符,或者确保它们不是正则表达式的元字符。

# -v:显示不被匹配到的行

[root@localhost Desktop]# cat test | grep -v -i aa 

1.3 grep egrep fgrep

  • grep:可以使用基本正则表达式进行内容查找匹配

  • egrep:可以使用扩展的正则表达式进行内容查找匹配

  • fgrep:只能查找固定内容,无法使用正则进行匹配

# 查找所有a开头结尾是z的内容
[root@localhost ~]# grep 'a.*z' data# 查找以a开头结尾为z,或者以a开头结尾为c的内容
[root@localhost ~]# egrep 'a.*z|a.*c' data# 只查找内容是axz的内容
[root@localhost ~]# fgrep 'a*z' data
[root@localhost ~]# grep -F 'a*z' data

二:sed命令 

在Linux中,sed(stream editor)是一种非常强大的流编辑器,它可以对文本进行过滤和转换。sed命令读取输入流(文件、管道等),对每一行应用你指定的编辑命令,然后将结果输出到标准输出(通常是屏幕,但也可以重定向到文件)。sed非常适合于执行文本替换、删除、插入和选择等操作。

2.1sed的基本语法:

 sed [-nefri] ‘command’ 输入文本   

选项说明

-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

​ -e∶直接在指令列模式上进行 sed 的动作编辑; ​

-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;

​ -r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)

​ -i∶直接修改读取的档案内容,而不是由屏幕输出。

动作说明

a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~ ​

c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行! ​

d ∶删除,因为是删除啊,所以 d 后面通常不接任何内容; ​

i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~ ​

s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g

2.2 使用举例

定义文件test,内容如下

    HELLO LINUX!  Linux is a free unix-type opterating system.  This is a linux testfile!  Linux test

2.2.1:增加内容

增加一行

在test输出的第一行后面追加一句my name is dijia

[root@localhost sedTest]# sed '1a my name is dijia' test
HELLO LINUX!  
my name is dijia
Linux is a free unix-type opterating system.  
This is a linux testfile!  

注意:只是将文字处理了,没有写入到文件里,文件里还是之前的内容。

查看文件的内容:

[root@localhost sedTest]# cat test
HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  

发现文件的内容并没有发生任何的变化

增加多行

在一行到第三行的后面追加上my name is dijia

[root@localhost sedTest]# sed '1,3a my name is dijia' test
HELLO LINUX!  
my name is dijia
Linux is a free unix-type opterating system.  
my name is dijia
This is a linux testfile!  
my name is dijia

2.2.2:插入内容

在最后一行插入byebye

[root@localhost sedTest]# sed '$a byby' test
HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test
byby

在这之前都是修改的输出内容,如果要修改文件中的真实内容加上一个 -i 就可以

如:

[root@localhost sedTest]# sed  - i '$a byby' test
HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test
byby

2.2.3:删除内容

删除的字符是d,用法跟前面也很相似,对匹配到的数据行,进行删除。

删除第一行

Linux test[root@localhost sedTest]# sed 1d test
Linux is a free unix-type opterating system.  
This is a linux testfile! 

 删除最后一行 

[root@localhost sedTest]# sed '$d' test
HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!

删除1到3行

[root@localhost sedTest]#  sed '1,3d' test
Linux test[root@localhost sedTest]# 

删除第二行到最后一行

[root@localhost sedTest]#  sed '1,3d' test
Linux test[root@localhost sedTest]# 

删除Linux打头的

[root@localhost sedTest]#  sed '/Linux/d' test
HELLO LINUX!  
This is a linux testfile!  

2.2.4:替换内容

将含有Linux的哪一行替换为dijia

Linux test[root@localhost sedTest]# sed '/Linux/c dijia' test
HELLO LINUX!  
dijia
This is a linux testfile!  
dijia

字符替换

s替换指定字符

语法: sed 's/原来的字符/新的字符/g' 文件名

将Linux的字符替换为dijia

[root@localhost sedTest]# sed 's/Linux/dijia/g' test
HELLO LINUX!  
dijia is a free unix-type opterating system.  
This is a linux testfile!  
dijia test[root@localhost sedTest]# 

给每一行内容前都加上### 

[root@localhost sedTest]# sed 's/^/###/g' test
###HELLO LINUX!  
###Linux is a free unix-type opterating system.  
###This is a linux testfile!  
###Linux test[root@localhost sedTest]# 

给每一行内容后都加上###

[root@localhost sedTest]# sed 's/$/###/g' test
HELLO LINUX!  ###
Linux is a free unix-type opterating system.  ###
This is a linux testfile!  ###
Linux test###[root@localhost sedTest]# 

这个其实就是正则表达式的语法,其他类似语法还有:

 ^ 表示一行的开头。如:/^#/ 以#开头的匹配。
​$ 表示一行的结尾。如:/}$/ 以}结尾的匹配。
​\< 表示词首。 如:\<abc 表示以 abc 为首的詞。This is  a cat abcTest  abcQQQ
​\> 表示词尾。 如:abc\> 表示以 abc 結尾的詞。. 表示任何单个字符。
​* 表示某个字符出现了0次或多次。
​[ ] 字符集合。 如:[abc] 表示匹配a或b或c,还有 [a-zA-Z] 表示匹配所有的26个字符。如果其中有^表示反,    如 [^a] 表示非a的字符

2.2.5:多个匹配

用-e命令可以执行多次匹配,相当于顺序依次执行两个sed命令:

同时给每行内容的前后都加上###

[root@localhost sedTest]# sed -e 's/^/###/g'  -e 's/$/###/g' sed-1
###HELLO LINUX!  ###
###Linux is a free unix-type opterating system.  ###
###This is a linux testfile!  ###
###Linux test###[root@localhost sedTest]# ^C

2.2.6:日志截取

定位日志

在系统应用集中部署的时候,很多日志因为太多难以定位,获取某段时间的日志是对运维人员非常关键的事情。

sed查看某时间的系统日志:

sed -n '/2024-03-17 09:25:55/,/2024-03-18 09:25:55/p'  logfile

sed查看某时间段到现在的系统日志:

sed  -n  '/2024-03-17 09:25:55/,$p'   logfile

三:awk命令

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符

linux中有三剑客之称: 三剑客之首就是 AWK

三剑客  功能:

grep : 过滤文本

sed : 修改文本

awk : 处理文本

awk只要是用来格式化文本

3.1 基本语法

awk [参数] [处理内容] [操作对象] 

参数说明

参数说明
-F separator指定字段分隔符。
-f file从指定的文件中读取程序
-v var=value定义awk程序中的一个变量及其默认值
-mf N指定要处理的数据文件中的最大字段数
-mr N指定数据文件中的最大数据行数
-W keyword指定awk的兼容模式或警告等级

4.2 使用举例

4.2.1 从命令行读取程序脚本

awk 动作 文件名

准备一个文件test

## 4.2 使用举例### 4.2.1 从命令行读取程序脚本```
awk 动作 文件名
```准备一个文件test~~~shell
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
1	zs	男	A11	80;90;100
2	ls	男	A12	80;50;60
3	ww	女	A13	30;20;40
4	aa	女	A14	50;20;40
5	zl	男	A15	50;60;30
~~~

打印第二行内容

[root@localhost awkTest]# awk '{print $2}' test
this
Are
a
There
zs
ls
ww
aa
zl

打印第一列和第四列的内容

[root@localhost awkTest]# awk '{print $1,$4}' test
2 a
3 like
This's 
10 orange,apple,mongo
1 A11
2 A12
3 A13
4 A14
5 A15
[root@localhost awkTest]# 

打印以逗号分隔的第一列值和第二列值 

[root@localhost awkTest]# awk -F ' ' '{print $1,$2}' test
2 this
3 Are
This's a
10 There
1 zs
2 ls
3 ww
4 aa
5 zl

匹配项中可以用正则表达式,比如:

查找以This开头的行

[root@localhost ~]# awk '/^This/' test3

查找以awk为结束的行

[root@localhost ~]# awk '/awk$/' test
匹配的就是严格以This开头的内容。

使用数据字段变量

awk会将如下变量分配给它在文本行中发现的数据字段(列):

  • $0代表整个文本行;

  • $1代表文本行中的第1个数据字段;

  • $2代表文本行中的第2个数据字段;

  • $n代表文本行中的第n个数据字段。

  • !: 逻辑非

  • ~ : 进行正则匹配(类似于关系表达式)

查找不包含is关键字的内容

[root@localhost awkTest]# awk '$0 !~ /is/' test
3 Are you like awk
10 There are orange,apple,mongo
1       zs      男      A11     80;90;100
2       ls      男      A12     80;50;60
3       ww      女      A13     30;20;40
4       aa      女      A14     50;20;40
5       zl      男      A15     50;60;30

查找包含is关键字的内容

[root@localhost awkTest]# awk '$0 ~ /is/' test
2 this is a test
This's a test

4.2.2 变量

wk中有不少内置的变量,比如$NF代表的是分割后的字段数量,相当于取最后一个。

NF: number filed 当前行分割后的字段个数。打印的时候,是取出最后一列

NR: number row 表示当前第几行

[root@localhost awkTest]# awk '{print $NF}' test
test
awk
test
orange,apple,mongo
80;90;100
80;50;60
30;20;40
50;20;40
50;60;30

输出当前行有几列,以及当前是第几行   每行内容后的两个数字,一共有几列,是第几行

[root@localhost awkTest]# awk '{print $0,NF,NR}' test
2 this is a test 5 1
3 Are you like awk 5 2
This's a test 3 3
10 There are orange,apple,mongo 4 4
1       zs      男      A11     80;90;100 5 5
2       ls      男      A12     80;50;60 5 6
3       ww      女      A13     30;20;40 5 7
4       aa      女      A14     50;20;40 5 8
5       zl      男      A15     50;60;30 5 9

其他的内置变量还有:

变量名说明
FILENAME:当前文件名
FS字段分隔符,默认是空格和制表符。
RS行分隔符,用于分割每一行,默认是换行符。
OFS输出字段的分隔符,用于打印时分隔字段,默认为空格。
ORS输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT数字输出的格式,默认为%.6g。

执行输出结果的各个列,用指定符号分隔

[root@localhost awkTest]# awk '{print $1,$2,$3}' OFS="-" test
2-this-is
3-Are-you
This's-a-test
10-There-are
1-zs-男
2-ls-男
3-ww-女
4-aa-女
5-zl-男

4.2.3 函数

awk还提供了一些内置函数,方便对原始数据的处理。主要如下:

toupper():字符转为大写。
tolower():字符转为小写。
length():返回字符串长度。
substr():返回子字符串。
sin():正弦。
cos():余弦。
sqrt():平方根。
rand():随机数。

将每行内容的最后一列转为大写形式输出

[root@localhost awkTest]# awk '{print toupper($NF)}' test
TEST
AWK
TEST
ORANGE,APPLE,MONGO
80;90;100
80;50;60
30;20;40
50;20;40
50;60;30

将当前行的第一列转为大写内容输出,并输出当前行的长度

[root@localhost ~]# awk '{print toupper($1),length($0)}' test
2 16
3 18
THIS'S 13
10 31

4.2.3 条件

awk允许指定输出条件,只输出符合条件的行。输出条件要写在动作的前面:

awk '条件 动作' 文件名

还是刚才的例子,用逗号分隔之后有好几个空白行,我们加上限制条件,匹配后为空的不显示:  

[root@localhost awkTest]# awk -F, '$2!=""{print $2}' test
apple
4.2.3.1 if 语句

awk提供了if结构,用于编写复杂的条件。

将第一列内容大于2的行输出:  

[root@localhost awkTest]# awk '{ if ( $1 > 2) print $0}' test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
3       ww      女      A13     30;20;40
4       aa      女      A14     50;20;40
5       zl      男      A15     50;60;30
4.2.3.2 begin 语句 end 语句

语法格式:

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

多行操作

准备文件test02

111 222 333
444 555 666
777 888 999
[root@localhost awkTest]# awk 'BEGIN{print "开始"} {print $1 "-" $2 "-" $3} END{print "结束"}' test02
开始
111-222-333
444-555-666
777-888-99
结束
4.2.3.2 从文件中读取

假设有这么一个文件(学生成绩表):

[root@localhost ~]# cat score.txt 
Marry   2143 78 84 77
Jack    2321 66 78 45
Tom     2122 48 77 71
Mike    2537 87 97 95
Bob     2415 40 57 62

我们的 awk 脚本如下:  

#!/bin/awk -f
#运行前
BEGIN {
math = 0;
english = 0;
computer = 0;printf "NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n"printf "---------------------------------------------\n"
}
#运行中
{
math+=$3
english+=$4
computer+=$5printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}
#运行后
END {printf "---------------------------------------------\n"printf "  TOTAL:%10d %8d %8d \n", math, english, computerprintf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}

我们来看一下执行结果:

[root@localhost awkTest]# awk -f cal.awk score.txt
NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL
---------------------------------------------
Marry  2143     78       84       77      239
Jack   2321     66       78       45      189
Tom    2122     48       77       71      196
Mike   2537     87       97       95      279
Bob    2415     40       57       62      159
---------------------------------------------TOTAL:       319      393      350 
AVERAGE:     63.80    78.60    70.00
[root@localhost awkTest]# 

总结

grep: 主要用户行内容的检索,通过正则表达式进行内容匹配,不能修改匹配的内容

sed: 可以进行内容匹配,对于匹配的内容可以进行修改

awk:针对指定行内容进行复杂处理,一般用于报表生成

相关文章:

Linux_Shell三剑客grep,awk,sed-08

三剑客的概述&#xff1a; awk、grep、sed是linux操作文本的三大利器&#xff0c;合称文本三剑客&#xff0c;也是必须掌握的linux命令之一。三者的功能都是处理文本&#xff0c;但侧重点各不相同&#xff0c;其中属awk功能最强大&#xff0c;但也最复杂。grep更适合单纯的查找…...

uniapp实现足球数据分析平台移动端H5

文章目录 前言一直想做一款足球分析平台&#xff0c;大概内容包括竞彩分析模块&#xff0c;即时预测模块&#xff0c;初盘分析模块&#xff0c;找来找去还是前端铺子的样式感觉比较好看。 一、界面一栏二、注册界面1.代码说明 三、首页界面四、竞彩预测五、即时预测总结 前言 …...

Redis5优化-Redis

1、Redis关键参数 a、客户端最大连接数 maxclients 60000 注意该参数受到操作系统最大文件句柄的限制(ulimit -n) b、响应 repl-ping-slave-period/repl-timeout repl-timeout 60 1&#xff09;、说明&#xff1a;slave 会每隔 repl-ping-slave-period(默认10秒)ping一次mast…...

Element UI【详解】el-scrollbar 滚动条组件

el-scrollbar 滚动条组件用于优化页内滚动条的UI效果&#xff0c;使用时必须指定高度&#xff01; /*el-scrollbar 必须指定高度*/ .scrollMenuBox {height: 200px;width: 100px;border: 1px solid red; } 控制el-scrollbar内滚动条的方法与控制页面的滚动条的方法基本一样&a…...

【精选】基于Python大型购物商城系统(京东购物商城,淘宝购物商城,拼多多购物商城爬虫系统)

目录&#xff1a; 目录&#xff1a; 系统介绍&#xff1a; 系统开发技术 Python语言 Django框架简介 MySQL数据库技术 B/S架构 系统设计 系统总体设计 系统详细界面实现&#xff1a; 系统测试 测试目的 测试用例 本章小结 参考代码&#xff1a; 为什么选择我&…...

QT翻金币小游戏(含音频图片文件资源)

目录 QT翻金币小游戏 音频图片资源文件获取 效果展示 图片 视频 实现代码 main.cpp mymainwindow.h mymainwindow.cpp startscene.h startscene.cpp selectscene.cpp playscene.h playscene.cpp mypushbutton.h mypushbutton.cpp dataconfig.h dataconfig.cpp QT…...

Linux配置JDK8环境变量

目录 一、yum安装1.1 OpenJDK安装1.2 测试是否能够使用1.3 如何卸载JDK 二、手动安装2.1 下载2.2 上传到linux服务器路径2.3 解压2.4 配置环境变量2.5 测试是否能够使用 一、yum安装 1.1 OpenJDK安装 sudo yum install -y java-1.8.0-openjdk-devel1.2 测试是否能够使用 jav…...

Fiddle抓手机app的包

前言 本次文章讲述的是&#xff0c;fiddle获取手机代理&#xff0c;从而获取手机app的http、https请求&#xff01; 一.下载安装汉化Fiddle 1.点击Fiddler官网下载链接&#xff1a;Download Fiddler Web Debugging Tool for Free by Telerik 2.直接运行&#xff0c;选择自己需…...

Oracle+ASM+High冗余详解及空间计算

Oracle ASM&#xff08;Automatic Storage Management&#xff09;的High冗余模式是一种提供高度数据保护的策略&#xff0c;它通过创建多个数据副本来确保数据的可用性和安全性。 以下是关于Oracle ASM High冗余的详细解释&#xff1a; 一、High冗余的特点 1.数据冗余度 在Hi…...

如何为 Nextcloud 配置自动数据库备份 - 应用程序

自动数据库备份模块简化了生成数据库计划备份的过程。这些备份可以存储在各种位置&#xff0c;包括本地驱动器、FTP 服务器、SFTP 服务器、Dropbox、Google Drive、OneDrive、NextCloud 和 Amazon S3 云存储。用户还可以选择启用自动删除过期备份的功能。此外&#xff0c;用户可…...

child_process.spawn简介

child_process.spawn 是 Node.js 中 child_process 模块的一个重要方法&#xff0c;它用于异步地创建子进程来执行指定的命令。下面是对 child_process.spawn 的深入解析&#xff1a; 一、基本用法 spawn 方法的基本语法如下&#xff1a; const { spawn } require(child_pr…...

整理给测试人看的千页面试题

人往高处走水往低处流&#xff0c;九月已来&#xff0c;“金九银十”招聘季还会远吗&#xff1f; 转眼2024年招聘季就要来了&#xff0c;没点真本事真技术&#xff0c;没点面试经验&#xff0c;不了解点职场套路&#xff0c;如何过五关斩六将&#xff1f;如何打败面试官&#…...

Linux 内核中的并发与竞争

1. 引入并发与竞争的概念 在现代计算环境中&#xff0c;多个任务和线程通常会同时执行&#xff0c;因此理解并发和竞争的特性与挑战至关重要。以下是对这两个概念的详细介绍。 1. 并发&#xff08;Concurrency&#xff09; 定义&#xff1a; 并发是指多个任务在同一时间段内…...

Ubuntu修改命令提示符格式PS1

命令提示符组成 通过Xshell进入Ubuntu的默认提示符是这样的 rootDESKTOP:~# root: 当前登录用户DESKTOP&#xff1a;主机名~: 当前目录名&#xff08;即用户主目录&#xff09;#&#xff1a;超级用户权限(root用户显示)$: 普通用户权限(非root用户显示) 修改命令提示符 step1…...

指针详解(五)

目录 1. 回调函数 2. qsort使用举例 1&#xff09;排序整型数据 2&#xff09;排序结构数据 3. qsort函数的模拟实现&#xff08;冒泡&#xff09; 1. 回调函数 回调函数就是一个通过函数指针调用的函数 函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数…...

智慧安防/一网统管/视频监控EasyCVR视频汇聚平台的视频轻量化特点及应用

在数字化时代&#xff0c;视频监控已成为保障公共安全、提升管理效率的重要手段。随着技术的不断进步&#xff0c;EasyCVR视频汇聚平台应运而生&#xff0c;平台以其独特的视频轻量化特点在安防监控领域展现出强大的应用潜力。本文将详细探讨EasyCVR视频汇聚平台的视频轻量化特…...

nginx代理转发如何配置

Nginx配置代理转发是一个常见的需求&#xff0c;用于将客户端的请求转发到后端服务器。以下是Nginx代理转发的配置步骤&#xff0c;包括详细的操作步骤和注意事项&#xff1a; 1. 确定Nginx安装和配置文件位置 首先&#xff0c;确保Nginx已经正确安装在服务器上。Nginx的主配…...

JavaScript学习笔记(十三):网络请求JS AJAX

1、AJAX - XMLHttpRequest 对象 1.1 XMLHttpRequest 对象是 AJAX 的基石。 创建 XMLHttpRequest 对象定义回调函数打开 XMLHttpRequest 对象向服务器发送请求 1.2 XMLHttpRequest 对象 所有现代浏览器都支持 XMLHttpRequest 对象。 XMLHttpRequest 对象可用于在后台与 Web…...

go for 循环变量的使用及易错点

1&#xff0c;for 循环变量&#xff0c;整个for循环中变量i始终使用一个变量&#xff0c;i地址不变&#xff0c;存放的内容在变 func main() {for i : 0; i < 10; i {fmt.Printf("值:%v 地址&#xff1a;%v \n", i, &i)} } 打印&#xff1a; 值:0 地址&am…...

2024嵌入式面试:OPPO嵌入式面试题及参考答案

目录 TCP 与 UDP 的区别是什么? 请简述 TCP 的三次握手过程。 HTTP 协议的工作原理是什么? C++11 引入了哪些新特性? 什么是智能指针?如何解决其内存泄漏问题? 进程间有哪些通信方式? CPU 的调度策略有哪些? 如何保证线程安全?多线程编程需要注意哪些问题? S…...

Cesium模型制作,解决Cesium加载glb/GLTF显示太黑不在中心等问题

Cesium模型制作&#xff0c;解决Cesium加载glb/GLTF显示太黑不在中心等问题 QQ可以联系这里&#xff0c;谢谢...

Java 操作 Redis和redis持久化

一、Jedis 我们要使用 Java 来操作 Redis&#xff0c;Jedis 是 Redis 官方推荐的 java连接开发工具&#xff01; 使用Java 操作 Redis 中间件&#xff01; 1.导入对应的依赖 https://mvnrepository.com/artifact/redis.clients/jedis <dependency><groupId>redi…...

Expo创建的React Native项目如何在Windows上进行打包

文章目录 前言eas打包步骤什么是AAB转换为apk文件 本地打包以Windows为例先安装docker&#xff0c;然后手动创建下面的三个文件构建 前言 下面是Expo如何在本地进行打包的过程&#xff08;windows&#xff09; eas打包 如果使用云打包&#xff0c;花费时间较多&#xff0c;时…...

探索Go语言中的结构体:定义和使用

引言 Go语言是一种静态类型的编程语言&#xff0c;它提供了多种数据结构来组织数据。结构体&#xff08;struct&#xff09;是Go中一种强大的自定义数据类型&#xff0c;允许你将多个不同或相同类型的字段组合成一个单一的实体。本文将介绍Go语言中结构体的基本概念、定义方法…...

Unity Dots学习 (一)

先学习怎么使用&#xff0c;再研究底层代码。Dots大家都有所耳闻。一直没时间研究&#xff0c;最近研究一下 看上图可知&#xff0c;哪怕是CPU的第三级缓存也比内存要快2-5倍。 资料&#xff1a; 《DOTS之路》第零节——前导课(1)——DOTS的5W1H问题_哔哩哔哩_bilibili 《DOT…...

C语言刷题日记(附详解)(1)

一、选择判断部分 第一题&#xff1a; 如下代码是否存在风险&#xff0c;并说明原因和修改方案 #include<stdio.h> int main() {char* str "hello world";*str a;return 0; }思路提示&#xff1a;这种形式的字符串存储在什么区域呢&#xff1f;是否真的有…...

SpringSecurity实现登录功能实战!!!

实现思路 登录 ①自定义登录接口 调用ProviderManager的方法进行认证 如果认证通过生成jwt 把用户信息存入redis中 ②自定义UserDetailsService 在这个实现类中去查询数据库 注意配置passwordEncoder为BCryptPasswordEncoder 退出登录&#xff0c;删除redis中的数…...

mysql中用一个查询获取多个数据库(模式)和表的计数之和

问题 下面的查询返回了4排数据&#xff0c;这很好。但我同时需要对同一个查询中的所有计数求和。这如何实现&#xff1f;我已经尝试了多种不同的方法&#xff0c;但只得到sintax报错。 SELECT COUNT(*) FROM schema1.table WHERE STATE 17 AND LEVEL 1 UNION ALL SELECT CO…...

linux patch 的制作方式

文章目录 制作patch1. 准备工作2. 使用 diff 命令生成补丁文件生成单个文件的补丁生成整个目录的补丁 3. 检查补丁文件 使用patch1. 应用补丁文件1.1 应用单个文件的补丁1.2 应用整个目录的补丁 总结示例&#xff1a;制作和应用补丁 前言&#xff1a; 在Linux系统中&#xff0c…...

白骑士的C#教学进阶篇 2.4 LINQ查询

系列目录 上一篇&#xff1a;白骑士的C#教学进阶篇 2.3 委托与事件 LINQ&#xff08;Language Integrated Query&#xff09;是C#中的一个强大特性&#xff0c;它提供了统一的语法来查询和操作各种数据源&#xff0c;如数组、集合、XML和数据库等。LINQ通过一种类似SQL的查询语…...

2024华为OD机试真题- 贪吃的猴子Python-C卷D卷-200分

目录 题目描述 输入描述 输出描述 用例1 用例2 用例3 解题思路 代码 2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述 一只贪吃的猴子,来到一个果园,发现许多串香蕉排成一行,每串香蕉上有若干根香蕉。每串香蕉的根数由数组numbers给出。 猴子获取香蕉,…...

4-1-2 直流电机(电机专项教程)

4-1-2 直流电机&#xff08;电机专项教程&#xff09; 4-1-2 直流电机主要参数尺寸参数额定电压额定电流空载转速 如何控制直流电机有刷直流电机转向控制H桥电路控制转向 如何控制电机转速PWM控制电机转速 4-1-2 直流电机 之前学习了有刷直流电机的基本结构个工作原理&#xff…...

[图解]用例规约之扩展路径

1 00:00:01,710 --> 00:00:03,670 基本路径写完之后 2 00:00:04,690 --> 00:00:07,270 接下来就是扩展路径 3 00:00:08,620 --> 00:00:14,000 扩展路径就是系统要处理的意外和分支 4 00:00:14,010 --> 00:00:19,710 系统要处理的 5 00:00:20,970 --> 00:00:…...

学习记录第二十八天

有名管道&#xff08;FIFO&#xff09; 在Linux系统中&#xff0c;有名管道是一种特殊类型的文件&#xff0c;它允许不相关的进程之间进行通信。有名管道在文件系统中有一个具体的路径和名称&#xff0c;因此它们可以被多个进程共同访问。有名管道的特点包括持久性、多进程访问…...

SpringBoot的事务/调度/缓存/邮件发送和一些Spring知识点总结

目录 1、SpringBoot的事务管理 2、SpringBoot的异步任务 3、SpringBoot定时任务调度 4、SpringBoot整合Mail发送邮件 5、Spring框架中的Bean的作用域 6、Spring框架中的Bean的线程安全 7、 Spring框架中的Bean生命周期 8、Spring框架如何解决循环依赖&#xff1f; 9、…...

透明加密技术

透明加密技术&#xff0c;也被称为透明数据加密&#xff08;Transparent Data Encryption, TDE&#xff09;&#xff0c;是一种加密方法&#xff0c;它允许数据在存储时自动加密和解密&#xff0c;而不需要用户进行任何手动操作。透明加密技术主要应用于数据库、文件系统和磁盘…...

深入理解Faiss:高效向量检索的利器

近年来&#xff0c;随着人工智能和机器学习技术的飞速发展&#xff0c;向量检索技术变得越来越重要。无论是在推荐系统、图像搜索还是自然语言处理等领域&#xff0c;向量检索都扮演着至关重要的角色。而在众多向量检索库中&#xff0c;Faiss&#xff08;Facebook AI Similarit…...

RK3576 芯片介绍

RK3576 芯片介绍 RK3576瑞芯微第二代8nm高性能AIOT平台&#xff0c;它集成了独立的6TOPS&#xff08;Tera Operations Per Second&#xff0c;每秒万亿次操作&#xff09;NPU&#xff08;神经网络处理单元&#xff09;&#xff0c;用于处理人工智能相关的任务。此外&#xff0…...

Python模块篇(五)

模块 模块与包模块的导入与使用标准库的常用模块第三方库的安装与使用&#xff08;如&#xff1a;pip工具&#xff09; 模块与包 模块是一个包含 Python 代码的文件&#xff0c;通常以 .py 作为扩展名。一个模块可以包含函数、类、变量&#xff0c;以及可执行的代码段。模块的…...

西安旅游系统--论文pf

TOC springboot383西安旅游系统--论文pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿…...

分享一个思路,使用插桩技术解决慢查询测试问题

前段时间&#xff0c;我负责测试的系统在生产环境运行出现问题。该系统对于响应时间要求较高&#xff0c;问题发生的时候并发很高&#xff0c;出现大量请求超时&#xff0c;超时请求比例随时间推迟越来越高&#xff0c;最后几乎全部请求都失败。滚动重启了所有进程后&#xff0…...

【STM32项目】在FreeRtos背景下的实战项目的实现过程(二)

个人主页~ 实战项目的实现过程&#xff08;一&#xff09;~ 实战项目的实现过程 二、初步了解各个外设硬件1、OLED模块2、GPS模块3、MPU6050模块4、超声测距模块5、温度测控模块6、语音模块7、SIM模块8、按键模块 三、查阅资料1、查看手册2、查找例程 四、研究硬件功能1、OLED…...

javaer快速入门 goweb框架 gin

gin 入门 前置条件 安装环境 配置代理 # 配置 GOPROXY 环境变量&#xff0c;以下三选一# 1. 七牛 CDN go env -w GOPROXYhttps://goproxy.cn,direct# 2. 阿里云 go env -w GOPROXYhttps://mirrors.aliyun.com/goproxy/,direct# 3. 官方 go env -w GOPROXYhttps://goproxy.…...

SQL - 数据类型

字符串类型 char(10)&#xff0c;存储固定长度字符串 varchar(255)&#xff0c;存储可变长度字符串 mediumtext&#xff0c;中文本&#xff0c;对于存储JSON对象、SCV字符串很好使 longtext&#xff0c;长文本&#xff0c;可以很好地存储教本或许多年地日志文件 tinytext&#…...

进程相关知识

进程和程序的区别 程序 程序是静态的&#xff0c;是存储在硬盘、SSD等存储介质中的一个文件&#xff0c;通常由源代码&#xff08;如 .c 文件&#xff09;编译生成的二进制可执行文件&#xff08;如 a.out&#xff09;。程序包含了指令和数据&#xff0c;但在未被执行时&#…...

萝卜快跑和端到端的自动驾驶(1)

先看一篇论文 2311.18636 (arxiv.org) 这篇论文里有一个非常好的图 比较了一下模块化任务(级联任务)和端到端自动驾驶的区别 首先什么叫模块化任务(级联) 如上图所示&#xff0c;左边的方块中的子方块&#xff0c;是展示了自动驾驶获取数据的途径&#xff0c;这里包括&…...

通信原理学习笔记

一个手机通话需要经过下面三个网络 类别接入网&#xff08;Access Network&#xff09;承载网&#xff08;Transport Network&#xff09;核心网&#xff08;Core Network&#xff09;定义连接终端用户与电信网络的部分。在接入网和核心网之间传输数据的网络。处理、交换和管理…...

系统编程---day4

1. 链接文件 命令行&#xff1a; ln -s 文件名 softlink 1.1 symlink int symlink(const char *oldpath, const char *newpath); 功能:创建一个链接向oldpath文件的新符号链接文件 参数:oldpath:被链接向的文件的路径 newpath:新符号链接文件 返回值:成功返回0,失败返回…...

01:电容的什么,各类电容的优缺点

1.电容是什么&#xff1f; 电容是由两块不连通的导体&#xff0c;已经中间的不导电材料组成 电容结构&#xff1a; 1.2电容的容量计算公式 C ε s d \displaystyle\frac{εs}{d} dεs​ 1.3常见电容的种类 1.4各类电容的特点...

Android+Jacoco+code-diff全量、增量覆盖率生成实战

背景 主要是记录下Android项目使用jacoco生成代码覆盖率的实战流程&#xff0c;目前已完成全量覆盖方案&#xff0c;仅使用jacoco就能实现&#xff1b; 由于我们的Android端是使用Java和kotlin语言,目前增量的方案code-diff仅针对Java代码&#xff0c;卡在kotlin文件的分析&am…...