Linux运维-SHELL编程之正则表达式与流编辑处理器
Linux运维-SHELL编程之正则表达式与流编辑处理器
什么是正则表达式
正则表达式是一种用来描述字符序列的强大工具,通常用于字符串的匹配、搜索和替换操作。它由普通字符(例如字母、数字)和特殊字符(称为元字符)组成,通过这些元字符可以构建出具有特定模式的字符串。正则表达式在文本处理、数据提取、验证输入等方面都有广泛的应用。
我们可以理解为:正则表达式是一种字符串的抽象,代表符合某些要求的字符串的一个范式,在一般情况下只要满足了正则表达式的条件就会被认定为匹配成功
正则表达式基本内容
基本元字符
元字符 | 描述 |
---|---|
. | 匹配任意单个字符除了\n 与\r |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
* | 匹配前面的字符零次或多次 |
+ | 匹配前面的字符至少一次或多次 |
? | 匹配前面的字符零次或一次 |
` | ` |
[] | 匹配括号内的所有字符,可在内部字符串首写^ 表示不匹配给定字符(例如[^ABC] ) |
[-] | 匹配在连续范围内的字符 |
[^] | 匹配不在该组内的字符 |
() | 表示一个子表达式 |
{n} | 匹配时指定前面字符出现的重复次数必须为n |
{n,} | 匹配时指定前面字符出现的重复次数至少为n,也可以指定至多出现次数{n,m} |
\ | 转义字符,用于匹配特殊字符 |
\< | 匹配一个词组开头的字串 |
正则表达式的贪婪(greedy)与非贪婪(non-greedy)指的是匹配模式下的不同行为。
- 贪婪:正则表达式默认是贪婪的,即会尽可能匹配更多的字符。例如,对于正则表达式
a.*b
,如果用来匹配字符串aabb
,它会匹配整个字符串,而不是只匹配到第一个b
为止。- 非贪婪:通过在量词后面加上
?
可以实现非贪婪匹配,这样正则表达式会尽可能少的匹配字符。例如,对于正则表达式a.*?b
,如果用来匹配字符串aabb
,它会匹配到第一个ab
为止,而不是匹配整个字符串。在量词后面加上
?
可以使得量词变成非贪婪的,否则默认是贪婪的。
带反斜杠的元字符
元字符 | 描述 |
---|---|
\s | 用来匹配所有空白字符,包括换行符 |
\S | 用来匹配非空白符,不包括换行符 |
\w | 匹配字母,数字,下划线 |
\d | 用来匹配数字 |
分组与捕获元
在正则表达式中,分组和非捕获元是用来对子表达式进行分组或者控制匹配行为的元字符。
-
分组:使用圆括号
()
来创建一个分组,可以对其中的子表达式进行分组,并对整个分组应用量词。例如,(?:...)
是一个非捕获分组,不会捕获匹配的内容,而(abc)
是一个捕获分组,会捕获匹配的内容以便后续使用。 -
非捕获元:用于对子表达式进行分组但不捕获匹配的内容。它可以避免将匹配的内容存储在匹配结果中,仅用于分组或者应用量词。
非捕获元 | 捕获元描述 |
---|---|
(?:exp1) | 捕获 exp1,但不记住匹配项。这在需要分组,但不需要捕获匹配内容时很有用。 |
(?=exp1) | 匹配 exp1 前面的位置,但不消费任何字符。这称为正向先行断言。例如,(?=\d) 匹配一个数字前面的位置,但不匹配数字本身。 |
(?!exp1) | 匹配后面跟的不是 exp1 的位置。这称为负向先行断言。例如,(?!\d) 匹配后面不是数字的位置。 |
(?<=exp1) | 匹配 exp1 后面的位置,但不消费任何字符。这称为正向后行断言。例如,(?<=\d) 匹配一个数字后面的位置,但不匹配数字本身。 |
(?<!exp1) | 匹配前面不是 exp1 的位置。这称为负向后行断言。例如,(?<!\d) 匹配前面不是数字的位置。 |
可以通过索引来引用。在使用捕获元时,可以通过
\1
、\2
等来引用先前捕获的内容。
修饰符
修饰符 | 描述 |
---|---|
i | 执行对大小写不敏感的匹配。 |
m | 多行模式。改变 ^ 和 $ 的行为,使它们分别在行的起始和结束处匹配,而不是在整个输入字符串的起始和结束处匹配。 |
s | 单行模式。改变 . 的行为,使其匹配所有字符,包括换行符 \n 。 |
g | 全局模式。查找所有匹配项,而不是在找到第一个匹配项后停止。 |
正则表达式匹配实例
- 匹配一个有效的IPv4地址,匹配形如
192.168.1.1
的IPv4地址:
^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
- 匹配一个日期(YYYY-MM-DD),匹配形如
2024-04-01
的日期:
^\d{4}-\d{2}-\d{2}$
- 匹配一个有效的邮箱地址,匹配形如
example@example.com
的邮箱地址:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
- 匹配一个简单的HTML标签(不考虑属性),匹配形如
<div>content</div>
的简单HTML标签:
<[a-zA-Z][a-zA-Z0-9]*>(.*?)<\/[a-zA-Z][a-zA-Z0-9]*>
- 匹配一个简单的URL(不考虑协议、端口和查询参数),匹配形如
http://example.com
的简单URL:
^(http|https):\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,}(\/\S*)?$
在之前的文章中我们介绍过
[[...]]
可以使用正则表达式:if [[ "$string" =~ pattern ]]; thenecho "Matched" fi
但是正则表达式使用更常见的地方并不在于此,而是流编辑处理器
文本查找工具grep
grep
是一个强大的文本搜索工具,常用于在文件中查找特定模式的文本行。以下是 grep
命令的一些常见用法:
-
基本用法:在文件中搜索指定模式的文本行。
grep 'pattern' file.txt
-
递归搜索:在指定目录及其子目录中递归搜索匹配的文本行。
grep -r 'pattern' directory/
-
忽略大小写:在搜索时忽略模式的大小写。
grep -i 'pattern' file.txt
-
显示匹配行数:显示匹配到的文本行的行数。
grep -c 'pattern' file.txt
-
显示不匹配行:显示不包含匹配模式的文本行。
grep -v 'pattern' file.txt
-
显示匹配文本:仅显示匹配到的文本,而不显示整行。
grep -o 'pattern' file.txt
-
显示匹配行及上下文:显示匹配到的文本行及其上下文行。
grep -C 2 'pattern' file.txt # 显示匹配行及其上下各两行
-
显示匹配行号:显示匹配到的文本行的行号。
grep -n 'pattern' file.txt
-
限制搜索深度:在递归搜索时,限制搜索的深度。
grep --max-depth=1 'pattern' directory/
-
扩展正则:当使用
-E
选项时,grep
将以扩展的正则表达式语法进行匹配grep -E 'pattern' file.txt
流编辑处理器sed
sed是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为模式空间(patternspace)。接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非使用重定向存储输出。Sed主要用来自动编辑一个或多个文件,简化了对文件的反复操作。
sed使用模式与常用选项
sed的使用模式一般是如下状态:
sed 选项 命令 文件
选项 | 描述 |
---|---|
-e <script> | 将指定的 script 用作 sed 命令。 |
-f <file> | 从指定文件中读取 sed 脚本。 |
-i <suffix> | 直接在文件中进行编辑,并可选地备份原始文件,备份文件的后缀名由 suffix 指定。 |
-n | 不输出模式空间的内容,只有通过命令显式指定打印内容时才会输出。 |
-r 或 --regexp-extended | 使用扩展的正则表达式语法。 |
-s 或 --separate | 将输入视为多个独立的文件。 |
-u 或 --unbuffered | 使用无缓冲的输出。 |
-V 或 --version | 显示 sed 的版本信息。 |
-e
和-f
是用于指定sed
脚本的选项,但有一些区别:
-e <script>
:-e
选项允许在命令行上直接指定sed
脚本可以多次使用-e
选项,每次指定一个脚本,这些脚本将按照指定的顺序依次执行。例如:sed -e 's/abc/def/' -e 's/123/456/' input.txt
这将依次执行两个替换操作,第一个将
abc
替换为def
,第二个将123
替换为456
。
-f <file>
:-f
选项允许从指定的文件中读取sed
脚本。文件中的每一行都被视为一个sed
命令。例如,如果有一个名为script.sed
的文件包含以下内容:s/abc/def/ s/123/456/
可以像如下使用
-f
选项,这将会按照文件中的顺序依次执行两个替换操作:sed -f script.sed input.txt
我们接下来以如下文件来演示sed功能:
Hello, World!
This is a test file for sed.
It contains some sample text that can be used to test various sed commands.
Feel free to modify this file and experiment with different sed commands.
sed is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sed!
sed删除文件中指定行
- 删除指令的基本格式如下,
d
表示执行删除操作
sed 选项 '/匹配条件/d' 文件名
注意,为了防止在shell中出现冲突,最好是使用强解析即''
,避免造成命令歧义
- 删除符合正则匹配条件的行
r123@localhost:~/shell_code$ sed -e '/commands/d' content.txt
Hello, World!
This is a test file for sed.
sed is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sed!
- 删除指定行号的内容
r123@localhost:~/shell_code$ sed -e '7d' content.txt
Hello, World!
This is a test file for sed.
It contains some sample text that can be used to test various sed commands.
Feel free to modify this file and experiment with different sed commands.
sed is a powerful stream editor.
It can perform a wide range of text processing functions.
- 删除指定行号范围内的行
r123@localhost:~/shell_code$ sed -e '3,4d' content.txt
Hello, World!
This is a test file for sed.
sed is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sed!
注意,这里的行号还可以用
$
来指定最后一行r123@localhost:~/shell_code$ sed -e '$d' content.txt Hello, World! This is a test file for sed. It contains some sample text that can be used to test various sed commands. Feel free to modify this file and experiment with different sed commands. sed is a powerful stream editor. It can perform a wide range of text processing functions.
r123@localhost:~/shell_code$ sed -e '3, $d' content.txt Hello, World! This is a test file for sed.
sed替换文件中的指定内容
- 替换命令的格式如下,正则修饰符是可选的
sed 选项 's/匹配条件/用于替换的字符串/[正则修饰符]' 文件名
我们以将所有sed替换为SED:
r123@localhost:~/shell_code$ sed -e 's/sed/SED/g' content.txt
Hello, World!
This is a test file for SED.
It contains some sample text that can be uSED to test various SED commands.
Feel free to modify this file and experiment with different SED commands.
SED is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing SED!
/g
表示全局匹配,如果不加的话,只会替换每行中的第一个sedr123@localhost:~/shell_code$ sed -e 's/sed/SED/' content.txt ... It contains some sample text that can be uSED to test various sed commands. ...
- 对匹配到的部分进行增加内容,即使用
&
表示匹配到的表达式
r123@localhost:~/shell_code$ sed -e 's/sed/&SED/g' content.txt
Hello, World!
This is a test file for sedSED.
It contains some sample text that can be usedSED to test various sedSED commands.
Feel free to modify this file and experiment with different sedSED commands.
sedSED is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sedSED!
这种操作实质上是相当于使用了捕获元,只不过使用捕获元必须在扩展正则状态下:
r123@localhost:~/shell_code$ sed -r 's/(sed)/\1SED/g' content.txt
Hello, World!
This is a test file for sedSED.
It contains some sample text that can be usedSED to test various sedSED commands.
Feel free to modify this file and experiment with different sedSED commands.
sedSED is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sedSED!
- 特殊情况下的匹配替换:存在
/
在字符串中时,我们必须将/
替换为#
r123@localhost:~$ echo '/abc/344555/abc' | sed -e 's#abc#&ABC#g'
/abcABC/344555/abcABC
r123@localhost:~$ echo '/abc/344555/abc' | sed -e 's#abc#&ABC/g'
sed: -e expression #1, char 12: unterminated `s' command
r123@localhost:~$ echo '/abc/344555/abc' | sed -e 's/abc/&ABC/g'
/abcABC/344555/abcABC
sed从其他文件中添加内容
- 基本命令格式如下,不添加匹配条件时,默认添加到每一行后
sed -e '[/匹配条件/]r 其他文件名' 当前文件名
- 在每一个符合匹配条件的行后增加文件内容
r123@localhost:~/shell_code$ echo 12345678 > 1.txt
r123@localhost:~/shell_code$ sed -e '/sed/r 1.txt' content.txt
Hello, World!
This is a test file for sed.
12345678
It contains some sample text that can be used to test various sed commands.
12345678
Feel free to modify this file and experiment with different sed commands.
12345678
sed is a powerful stream editor.
12345678
It can perform a wide range of text processing functions.
Enjoy testing sed!
12345678
- 在当前文件后追加新文件内容
r123@localhost:~/shell_code$ sed -r '$r 1.txt' content.txt
Hello, World!
This is a test file for sed.
It contains some sample text that can be used to test various sed commands.
Feel free to modify this file and experiment with different sed commands.
sed is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sed!
12345678
sed文件内容另存为操作
- 基本命令格式如下,不添加匹配条件时,默认另存整个文件
sed -e '[/匹配条件/]w 其他文件名' 当前文件名
r123@localhost:~/shell_code$ sed -e '/commands/w tmp.txt' content.txt
Hello, World!
This is a test file for sed.
It contains some sample text that can be used to test various sed commands.
Feel free to modify this file and experiment with different sed commands.
sed is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sed!
r123@localhost:~/shell_code$ cat tmp.txt
It contains some sample text that can be used to test various sed commands.
Feel free to modify this file and experiment with different sed commands.
- 另存指定行的内容
r123@localhost:~/shell_code$ sed -e '1,3w tmp.txt' content.txt
Hello, World!
This is a test file for sed.
It contains some sample text that can be used to test various sed commands.
Feel free to modify this file and experiment with different sed commands.
sed is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sed!
r123@localhost:~/shell_code$ cat tmp.txt
Hello, World!
This is a test file for sed.
It contains some sample text that can be used to test various sed commands.
sed追加内容到指定位置
- 基本命令格式如下,不添加匹配条件时,默认追加到每行之后
sed -e '[/匹配条件/]a追加内容' 文件名
r123@localhost:~/shell_code$ sed -e '/commands/a123456' content.txt
Hello, World!
This is a test file for sed.
It contains some sample text that can be used to test various sed commands.
123456
Feel free to modify this file and experiment with different sed commands.
123456
sed is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sed!
- 追加内容到指定范围的行后
r123@localhost:~/shell_code$ sed -e '3,5a123456' content.txt
Hello, World!
This is a test file for sed.
It contains some sample text that can be used to test various sed commands.
123456
Feel free to modify this file and experiment with different sed commands.
123456
sed is a powerful stream editor.
123456
It can perform a wide range of text processing functions.
Enjoy testing sed!
- 在一行后面追加多行内容
r123@localhost:~/shell_code$ sed -e '1a 233\23333\233333 ' content.txt
Hello, World!
233
23333
233333
This is a test file for sed.
...
命令
i
与a
的操作几乎是一致的,不过i的作用是在指定行的前面添加内容,这与a
大同小异,故不多赘述:r123@localhost:~/shell_code$ sed -e '3i123456' content.txt Hello, World! This is a test file for sed. 123456 It contains some sample text that can be used to test various sed commands. Feel free to modify this file and experiment with different sed commands. sed is a powerful stream editor. It can perform a wide range of text processing functions. Enjoy testing sed!
sed进行整行替换操作
- 基本命令格式如下,不添加匹配条件时,默认替换每一行
sed -e '[/匹配条件/]c追加内容' 文件名
- 替换指定行号的内容
r123@localhost:~/shell_code$ sed -e '2c 233333333' content.txt
Hello, World!
233333333
It contains some sample text that can be used to test various sed commands.
Feel free to modify this file and experiment with different sed commands.
sed is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sed!
- 替换指定范围行号的内容为一行
r123@localhost:~/shell_code$ sed -e '1,2c233333333' content.txt
233333333
It contains some sample text that can be used to test various sed commands.
Feel free to modify this file and experiment with different sed commands.
sed is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sed!
sed操作目标行的下一行
我们使用{}
来包含多个命令来执行这一操作,n
用于指定下一行:
sed 选项 '/匹配条件/{n;其他命令}' 文件名
r123@localhost:~/shell_code$ sed -r '/commands/{n; d}' content.txt
Hello, World!
This is a test file for sed.
It contains some sample text that can be used to test various sed commands.
sed is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sed!
sed命令反向操作文件
我们使用!
来让命令作用范围反向操作:
r123@localhost:~/shell_code$ sed -e '/commands/!d' content.txt
It contains some sample text that can be used to test various sed commands.
Feel free to modify this file and experiment with different sed commands.r123@localhost:~/shell_code$ sed -e '/commands/d' content.txt
Hello, World!
This is a test file for sed.
sed is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sed!
sed执行多个操作的方式
- 使用多个
e
选项执行
r123@localhost:~/shell_code$ sed -e '1d' -e '3d' content.txt
This is a test file for sed.
Feel free to modify this file and experiment with different sed commands.
sed is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sed!
- 使用分号分割命令
r123@localhost:~/shell_code$ sed -e '2d;3d' content.txt
Hello, World!
Feel free to modify this file and experiment with different sed commands.
sed is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sed!
- 使用
{}
执行多个命令
r123@localhost:~/shell_code$ sed -e '2,4{s/sed/&SED/g; s/commands/COMMANDS/g}' content.txt
Hello, World!
This is a test file for sedSED.
It contains some sample text that can be usedSED to test various sedSED COMMANDS.
Feel free to modify this file and experiment with different sedSED COMMANDS.
sed is a powerful stream editor.
It can perform a wide range of text processing functions.
Enjoy testing sed!
流编辑处理器awk
awk
是一种强大的文本处理工具,通常用于处理和分析文本文件中的数据。它以行为单位处理文本文件,可以根据指定的规则对文件进行处理和转换。awk
的基本工作流程是读取文件的每一行,将每一行拆分成字段(默认以空格分隔),然后应用用户定义的操作对字段进行处理。
awk
的基本结构如下:
awk 'pattern { action }' filename
其中,pattern
是一个条件,用于指定何时执行action
,action
是要执行的操作。如果没有提供filename
,awk
将从标准输入读取数据。
例如,要打印一个文件的第一列,可以使用以下命令:
awk '{ print $1 }' filename
这将打印文件中每一行的第一个字段(以空格分隔)。
注意:
awk
实质上是一种完整的编程语言,具有变量、数组、控制结构等基本编程元素。除了作为命令行工具使用外,awk
也可以编写独立的awk
脚本文件,其中包含更复杂的逻辑和功能。awk
提供了丰富的内置函数和特殊变量,使其在文本处理和数据转换方面非常强大和灵活。
awk的工作流程
awk
的工作流程通常如下:
- 读取文件:
awk
从指定的文件或标准输入中逐行读取数据。 - 分割行:每行数据根据指定的分隔符(默认为空格)被拆分成多个字段。
- 匹配模式:对每一行数据,
awk
根据用户提供的模式进行匹配。模式可以是简单的条件,也可以是正则表达式。 - 执行动作:如果模式匹配成功,
awk
执行与模式关联的动作。动作可以是打印、计算、赋值等操作。 - 重复处理:
awk
重复以上步骤,直到处理完所有输入数据。 - 输出结果:根据执行的动作,
awk
将生成的结果输出到标准输出或指定的文件中。
在分割行时,awk实质上是先将当前读取到的行的数据储存在$0
,然后根据分割符将内容分组依次存储到$1
,$2
,…
awk的命令结构
awk 选项 '命令' 文件名
选项 | 功能 |
---|---|
-F | 指定字段分隔符 |
-f | 指定awk 脚本文件 |
-v | 定义awk 变量 |
-i | 修改awk 的工作模式 |
-W | 控制awk 的警告消息 |
-o | 控制awk 的输出格式 |
-O | 控制awk 的输出字段 |
-F | 控制awk 的输入字段 |
awk的特殊模式
awk
中的BEGIN
和END
是特殊模式,用于在处理输入之前和之后执行一次性操作。
- 使用
BEGIN
在处理之前打印标题:
awk 'BEGIN { print "Name\tAge\tGender" } { print $1 "\t" $2 "\t" $3 }' data.txt
这个命令在处理data.txt
之前会打印一行标题,然后对每一行数据打印第一、第二、第三个字段。
- 使用
END
在处理之后打印汇总信息:
awk '{ total += $1 } END { print "Total: " total }' data.txt
注意:BEGIN
和END
块中的代码只会执行一次,分别在处理开始和结束时执行。
awk简单使用案例
r123@localhost:~/shell_code$ sudo awk -F : 'BEGIN{ print "start"}{print $1" => "$2}END{print "end"}' /etc/passwdstart
root => x
daemon => x
bin => x
...
end
实质上使用的时候其他操作比较少见,sed就可以了,这里唯一需要注意的是,我们需要将其他的字符串以""
包括
相关文章:
Linux运维-SHELL编程之正则表达式与流编辑处理器
Linux运维-SHELL编程之正则表达式与流编辑处理器 什么是正则表达式 正则表达式是一种用来描述字符序列的强大工具,通常用于字符串的匹配、搜索和替换操作。它由普通字符(例如字母、数字)和特殊字符(称为元字符)组成&…...
openGauss学习笔记-256 openGauss性能调优-使用Plan Hint进行调优-优化器GUC参数的Hint
文章目录 openGauss学习笔记-256 openGauss性能调优-使用Plan Hint进行调优-优化器GUC参数的Hint256.1 功能描述256.2 语法格式256.3 参数说明 openGauss学习笔记-256 openGauss性能调优-使用Plan Hint进行调优-优化器GUC参数的Hint 256.1 功能描述 设置本次查询执行内生效的…...
flex:1的作用是什么?
占满剩余的高度 <div classfather><div classson1></div><div classson2></div> </div>当给father添加display:flex之后,假设给son2添加flex:1,那么son2将会占满除son1之外的高度...
Mysql安装(命令方式安装)
下载mysql压缩包 Mysql可以使用界面安装,也可以使用命令的方式安装,今天我们使用命令的方式安装mysql。首先下载mysql压缩包(下载地址:https://dev.mysql.com/downloads/mysql/),解压到你想要安装的目录。 …...
Vben Admin实战-系统管理之用户管理-(第12节)
系列文章目录 第一节:Vben Admin介绍和初次运行 第二节:Vben Admin 登录逻辑梳理和对接后端准备 第三节:Vben Admin登录对接后端login接口 第四节:Vben Admin登录对接后端getUserInfo接口 第五节:Vben Admin权限-前端控制方式 第六节:Vben Admin权限-后端控制方式 第七节…...
Oracle常规操作
1、查看用户和密码 select username,password from dba_users; --修改用户和密码 alter user system identified by manager; alter user system identified by values 2D594E86F93B17A1; --解锁用户 alter user system account unlock; -- 用SYSDBA身份进入数据库,然…...
「33」如何让你的直播场景增加透视感?
「33」模糊滤镜增强背景画面透视感 在直播中,背景一直是作为一种陪衬而存在的,位于主场景的后面,其实,说得更直白一些,背景的存在就犹如“绿叶”,是为了衬托红花更加艳丽。所以…… 你通过画面背景的调整,可以从整体上对视频或图片的画面进行装饰,有助于增加画面的空间…...
Macbook文件清理软件 Mac电脑清理垃圾文件怎么清理
为了维护Macbook电脑的系统健康,我们需要定期给电脑进行全面清理,清除系统垃圾文件、软件缓存和系统内存。那么好用的Macbook文件清理软件有哪些呢?今天就给大家介绍几款好用的电脑清理软件并介绍Mac电脑清理垃圾文件怎么清理。 一、Macbook…...
【Java基础】Java基础知识整合
文章目录 1. 转义字符2. 变量2.1 字符串与整型相加2.2 byte和short的区别2.3 float和double的区别2.4 char类型2.5 boolean类型2.6 自动类型转换及运算2.7 强制类型转换2.8 String的转换2.9 除法运算2.10 取模规则 3. 自增4. 逻辑运算符5. 赋值运算 6. 三元运算符:7…...
构建集创建、售卖、转让于一体,且基于ERC721 token的NFT平台,从编写智能合约开始(Web3项目四实战之一)
NFT 全称是 non-fungible token(非同质化代币或不可篡改代币)是记录在区块链上的唯一数字标识符,用于证明所有权和真实性。NFT 的所有权记录在区块链中,所有者可以转让,从而允许 NFT 出售和交易。任何人都可以创建 NFT,创建 NFT 几乎不需要任何编码技能。NFT 通常包含对艺…...
跨境金融区块链服务平台
跨境金融服务是因企业及个人跨境经营、交易、投资、往来等活动而产生的资金使用、调拨、配置等需求,而提供的金融服务。近年来,随着我国经济的快速稳步增长和全球化经济一体化的不断深入发展,跨境金融业务增长迅速,监管也开始转化…...
运筹学经典问题(八):CVRP和VRP-TW
文章目录 问题描述问题建模决策变量数学建模基于容量的消除子环的约束 (load-based SECs) CVRP完整的数学模型加上时间窗限制的CVRP 问题描述 给定一个图,图上的点代表客户,边代表客户之间的路线,边的权重代表客户之间…...
AI与技术美术(TechArt)
AI技术与TA 人工智能(AI)技术在技术美术(TechArt)领域的应用,为创业者开辟了一片新的天地。技术美术作为一个跨学科领域,融合了传统美术和现代技术,特别是AI技术,以创造新型的艺术表…...
二叉树层序遍历 及相关题目
1,力扣102 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]示例…...
【前端面试3+1】11 http和https有何不同及https的加密过程、数组有哪些方法及作用、tcp三次握手四次挥手、【分发饼干】
一、http和https有何不同?https的加密过程 1、不同: HTTP和HTTPS的主要区别在于安全性。HTTP是超文本传输协议,是一种用于传输数据的协议,但是传输的数据是明文的,容易被窃听和篡改。而HTTPS是在HTTP基础上加入了SSL/T…...
替代 Redis 和 Memcached:25 倍吞吐量! | 开源日报 No.213
dragonflydb/dragonfly Stars: 22.4k License: NOASSERTION Dragonfly 是一个内存数据存储,适用于现代应用工作负载,可替代 Redis 和 Memcached。与传统的内存数据存储相比,Dragonfly 提供了 25 倍的吞吐量、更高的缓存命中率和更低尾部延…...
Qt与OpenCV实现图像模板匹配
在 Qt 中使用 OpenCV 实现模板匹配可以通过集成 OpenCV 库和使用其相关函数来完成。以下是一般的步骤: 安装 OpenCV:首先,确保你已经安装了 OpenCV 库,并将其配置到你的开发环境中。 创建 Qt 项目:使用 Qt creator 或…...
OpenHarmony实战:CMake方式组织编译的库移植
以double-conversion库为例,其移植过程如下文所示。 源码获取 从仓库获取double-conversion源码,其目录结构如下表: 表1 源码目录结构 名称描述double-conversion/cmake/CMake组织编译使用到的模板double-conversion/double-conversion/源…...
Linux云计算之Linux基础3——Linux基本认识操作
1、终端 终端(terminal):人和系统交互的必要设备,人机交互最后一个界面(包含独立的输入输出设备) 物理终端(console):直接接入本机器的键盘设备和显示器虚拟终端(tty):通过软件方式虚拟实现的终端。它可以…...
canvas画图,画矩形、圆形、直线可拖拽移动,可拖拽更改尺寸大小
提示:canvas画图,画矩形,圆形,直线,曲线可拖拽移动 文章目录 前言一、画矩形,圆形,直线,曲线可拖拽移动总结 前言 一、画矩形,圆形,直线,曲线可拖…...
Github 2024-04-04 Go开源项目日报 Top10
根据Github Trendings的统计,今日(2024-04-04统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Python项目1Prometheus监控系统和时间序列数据库 创建周期:4149 天开发语言:Go协议类型:Apache License 2.0Star数量:52463 个Fork…...
并发与限流实战:如何利用 RabbitMQ 在 SpringBoot 应用中实现并发控制与流量限制
在高并发场景下,如大促销、秒杀等,我们可以采用 RabbitMQ 配合 SpringBoot 来实现并发控制与流量限制。你可以将 RabbitMQ 作为一个缓冲区,暂存大量并发请求,然后消费者可以根据自身处理能力去处理这些请求。下面就以一个高并发订…...
VUE实现下一页的功能
实现步骤:1、确定分页参数:确定当前页码和每页显示的数量;2、获取数据:使用vue的axios或其他http库向后端发送请求,传递当前页码和每页显示的数量作为参数;3、更新数据:在vue组件中,…...
GraalVM运行模式和企业级应用
文章目录 GraalVM运行模式JIT模式AOT模式 GraalVM的问题和解决方案GraalVM企业级应用传统架构的问题Serverless架构函数计算Serverless应用场景Serverless应用 GraalVM内存参数 GraalVM运行模式 JIT模式 JIT( Just-In-Time )模式 ,即时编译模…...
数据挖掘入门项目二手交易车价格预测之特征工程
文章目录 目标常见的特征工程具体步骤1. 导入数据2. 删除异常值3. 特征构造3.1 为树模型构造特征3.2 为LR NN 之类的模型构造特征 4. 特征筛选过滤式包裹式嵌入式 5. 总结 本文数据集来自阿里天池:https://tianchi.aliyun.com/competition/entrance/231784/informat…...
MFC通用静态库制作与使用
开发环境VS2013 1、新建工程,选择Win32 Project,命名,选择路径等 2、选择Static library ,勾选MFC 3、点击完成。在工程中添加相应的头文件、源文件等通用功能函数或者类。 4、在其他工程引入使用。在使用的工程项目设置中Linker…...
点亮创意:ChatGPT如何搭桥DALL-E图像编辑新纪元
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
《QT实用小工具·十二》邮件批量发送工具
1、概述 源码放在文章末尾 该项目实现了邮件的批量发送,如下图所示: 项目部分代码如下所示: #ifndef SMTPCLIENT_H #define SMTPCLIENT_H#include <QtGui> #include <QtNetwork> #if (QT_VERSION > QT_VERSION_CHECK(5,0,…...
4.2总结
了解了部分Api的使用并学习了接口的API API API包含了较多种类(System,Runtime等) System其实就是一个工具类,提供了一些与系统相关的方法 下面有一些常间的System方法 方法名说明public static void exit (int status)终止当前运行的ja…...
ArcGIS 10.8中文版详细安装教程(附安装包)
ArcGIS 10.8中文版详细安装教程(附安装包) 关键词:ArcGIS 10.8中文版安装 1.概述 ArcGIS Desktop 10.8中文版是由ESRI公司开发的一款专业的地理信息系统,一套完整的桌面GIS软件套件,它包含ArcMap、ArcCatalog、ArcG…...
网站模版asp/引流推广软件
1.首先下载 mysql安装包, 我这里下载的mysql 5.7(免安装版) https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-winx64.zip 然后解压到你自己的目录中,我这里为 D 盘下: 此处,下下来的压缩包里面, data 目…...
php学完可以做网站/网络营销推广的渠道有哪些
树莓派利用pi Camera模块,通过mjpg-streamer软件获取视频,通过手机端或电脑端浏览实时视频。 mjpg-streame是一个开源的摄像头的媒体流,他是通过本地获取本地摄像头的数据,再通过http通讯发出来,到时候通过浏览器访问树…...
精美网站制作/企业文化案例
最近一直在忙着和数据库有关的一些工作,这几天在写存储过程的时候,一些mysql的语句突然感觉有些不太明白,就是group by , order by ,where , having这些语句,这次通过一个实例来总结…...
营销型网站./新媒体
基于MQTT协议的消息传输为什么MQTT?之前刚写了一篇关于socket的文章,为什么又来一个MQTT?因为MQTT协议就是socket接口实现的啊(socket和MQTT只是层级不一样而已),并且感觉发布/订阅模式非常棒,于…...
如何提高网站用户体验/手机百度网页版登录入口
Java SE、Java EE、Java ME三者的区别现在一个个来分析1. Java SE(Java Platform,Standard Edition)。Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,…...
国外销售网站/头条新闻
提示:不支持上面代码编写的格式 主要问题是因为我哪个print的字符串格式化写错了,应改是%s...