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

正则表达式三剑客之——grep和sed

目录

一.grep

1.1定义

1.2核心功能

1.3基本语法

1.4常用选项

二.sed

2.1 定义 

2.2 工作原理

2.3 基本语法 

2.3.1常用选项

2.3.2sed自身脚本语法 

1. 基本组成

2. 地址 

3. 命令

2.3.3 sed替换查找

1 基本语法

2.sed替换查找的实例

3.分组+后向引用

4 变量调用

三.练习


一.grep

1.1定义

grep 是一个命令行工具,用于在文本文件中搜索指定的模式(通常是字符串或正则表达式),并输出匹配的行。

1.2核心功能

  1. 文本搜索:在文件中查找包含指定模式的行。
  2. 模式匹配:支持基本字符串匹配和正则表达式匹配。
  3. 灵活输出:可以输出匹配的行、行号、文件名,或者统计匹配的行数等。

1.3基本语法

grep [选项]… 查找条件 目标文件
  • 查找条件:要搜索的字符串或正则表达式。
  • 目标文件:要搜索的文件(可以是多个文件)。
  • 选项:用于控制 grep 的行为(如忽略大小写、递归搜索等)

1.4常用选项

选项功能示例
-i忽略大小写匹配grep -i "hello" file.txt(匹配 helloHelloHELLO 等)
-v反向匹配,输出不包含模式的行grep -v "hello" file.txt(输出不包含 hello 的行)
-r递归搜索目录grep -r "hello" /path/to/dir(在目录及其子目录中搜索)
-R递归目录,但处理软链接grep -R "hello" /path/to/dir(在 /path/to/dir 及其子目录中递归搜索 "hello",并跟随符号链接。)
-n显示匹配行的行号grep -n "hello" file.txt(输出匹配行及其行号)
-m最多输出的匹配行数。grep -m 3 "hello" file.txt(输出前 3 个匹配的行,然后停止搜索。
-c(count)统计匹配的行数grep -c "hello" file.txt(输出匹配 hello 的行数)
-E使用扩展正则表达式(等同于 egrep
-F不支持正则表达式,相当于fgrep
-w匹配整个单词grep -w "hello" file.txt(只匹配单词 hello,不匹配 helloworld
-o(--only-matching)只输出匹配的部分,而不是整行grep -o "hello" file.txt(只输出 hello,而不是整行)
-l只显示包含匹配模式的文件名grep -l "hello" *.txt(输出包含 hello 的文件名)
-L只显示不包含匹配模式的文件名grep -L "hello" *.txt(输出不包含 hello 的文件名)
-A显示匹配行及其后若干行grep -A 2 "hello" file.txt(输出匹配行及其后 2 行)
-B显示匹配行及其前若干行grep -B 2 "hello" file.txt(输出匹配行及其前 2 行)
-C显示匹配行及其前后若干行grep -C 2 "hello" file.txt(输出匹配行及其前后 2 行)
-e指定多个模式grep -e "hello" -e "world" file.txt(匹配 hello 或 world
-f从文件中读取模式grep -f patterns.txt file.txt(从 patterns.txt 中读取模式进行匹配)
-q静默模式,不输出任何内容,仅通过退出状态码表示是否匹配grep -q "hello" file.txt(匹配成功返回 0,失败返回 1)
--color=auto高亮显示匹配的部分grep --color=auto "hello" file.txt(匹配的 hello 会高亮显示)
-h不显示文件名(当搜索多个文件时)grep -h "hello" file1.txt file2.txt(只输出匹配行,不显示文件名)
-H显示文件名(默认行为,当搜索多个文件时)grep -H "hello" file1.txt file2.txt(输出匹配行及其文件名)
-s忽略错误信息(如文件不存在)grep -s "hello" non_existent_file.txt(不显示错误信息)

二.sed

2.1 定义 

sed 是一个非交互式的流编辑器,它从输入流(如文件或管道)中逐行读取文本,根据用户指定的命令对文本进行处理,然后将结果输出到标准输出(默认是终端)。sed 不会直接修改原始文件,除非明确指定。

2.2 工作原理

sed 的核心是逐行处理文本。它的工作流程如下:

  1. 读取一行:从输入流中读取一行文本,并将其存储在模式空间(Pattern Space)中。

  2. 应用命令:对模式空间中的文本应用用户指定的命令(如替换、删除、插入等)。

  3. 输出结果:将处理后的文本输出到标准输出。

  4. 循环处理:重复上述步骤,直到所有行都被处理完毕。

模式空间(Pattern Space)

  • 用于存储当前正在处理的行。
  • 所有的 sed 命令都是对模式空间中的文本进行操作。

2.3 基本语法 

sed [option]... 'script;script;...' [input  file...]选项         自身脚本语法         支持标准输入管道

2.3.1常用选项

选项说明
-n禁止自动输出,只打印被 p 命令处理的行。
-e指定多个脚本命令。
-f FILE从脚本文件中读取命令。
-i直接修改文件内容(原地编辑)。
-r或-E使用扩展正则表达式(默认是基本正则表达式)。
-s将输入文件视为多个独立的文件处理。
-i.bak备份文件并原处编辑

2.3.2sed自身脚本语法 

1. 基本组成

sed 脚本由一系列命令组成,每个命令通常包括以下部分:

  1. 地址(可选):指定命令作用的目标行。

  2. 命令:定义要执行的操作。

  3. 参数(可选):命令所需的额外信息。

2. 地址 

地址用于指定命令作用的目标行。可以是行号、正则表达式或范围。

地址类型格式说明

单行地址

指定命令作用于某一行。
n第 n 行(n 是行号,从 1 开始)。
$最后一行。
/模式/匹配正则表达式 模式 的行。

范围地址

指定命令作用于一个范围内的行。
起始行,结束行从 起始行 到 结束行 之间的行。
/模式1/,/模式2/从匹配 模式1 的行到匹配 模式2 的行。
起始行,+n从 起始行 开始的 n 行。
起始行,~n从 起始行 开始,每隔 n 行处理一次。

组合地址

通过逻辑组合多个地址,指定更复杂的目标行。
地址1;地址2对 地址1 和 地址2 都执行命令。
地址1,地址2!对不在 地址1 和 地址2 之间的行执行命令。

特殊地址

sed 提供了一些特殊地址,用于处理特定的行。
1~n从第 1 行开始,每隔 n 行处理一次。
n~m从第 n 行开始,每隔 m 行处理一次。
0,/模式/从第 1 行到匹配 模式 的行。
3. 命令
命令说明
d删除匹配的行。
p打印匹配的行。
Ip忽略大小写输出
!模式空间中匹配行取反处理
i\将指定的文本插入到匹配到的行前面。
a\

将指定的文本添加到匹配到的行后面。

c\替换行为单行或多行文本
r file将文件内容插入到当前行后。
w file保存模式,将当前行写入文件。
q退出 sed 处理。
=为模式空间中的行打印行号
i在当前行前插入文本。
s替换文本。(更详细的在下面sed替换查找中)
1.sed '1d' file.txt
删除 file.txt 的第一行。2.sed -n '/pattern/p' file.txt
只打印包含 pattern 的行。3.sed -n '/pattern/Ip' file.txt
忽略大小写并打印包含 pattern 的行。4.sed '/pattern/!d' file.txt
删除不包含 pattern 的行。5.sed '/pattern/i\new line' file.txt
在包含 pattern 的行之前插入 new line。6.sed '/pattern/a\new line' file.txt
在包含 pattern 的行之后追加 new line。7.sed '/pattern/c\new line' file.txt
将包含 pattern 的行替换为 new line。8.sed '/pattern/r otherfile.txt' file.txt
在包含 pattern 的行之后插入 otherfile.txt 的内容。9.sed '/pattern/w output.txt' file.txt
将包含 pattern 的行写入 output.txt。10.sed '/pattern/q' file.txt
在遇到包含 pattern 的行后退出。11.sed '/pattern/=' file.txt
打印包含 pattern 的行的行号。12.sed 's/old/new/' file.txt
将 old 替换为 new。13.sed '/pattern/i\new line' file.txt
在包含 pattern 的行之前插入 new line。14.sed 's/old/new/' file.txt
将 old 替换为 new。

2.3.3 sed替换查找

1 基本语法
sed 's/要查找的内容/替换的内容/修饰符' 文件名 
# '/'为分隔符,可以用'@' 或者 '#'
# 要查找的内容可以用正则表达式 
# 替换的内容无法用正则表达式# 修饰符 #
g 行内全局替换
p 显示替换成功的行
w   /PATH/FILE 将替换成功的行保存至文件中
I,i   忽略大小写
2.sed替换查找的实例
示例 1:简单替换
将每行的第一个 foo 替换为 bar:
sed 's/foo/bar/' input.txt示例 2:全局替换
将每行的所有 foo 替换为 bar:
sed 's/foo/bar/g' input.txt示例 3:忽略大小写替换
将每行的所有 foo(忽略大小写)替换为 bar:
sed 's/foo/bar/gi' input.txt示例 4:打印替换后的行
仅打印替换后的行:
sed -n 's/foo/bar/p' input.txt示例 5:将替换后的行写入文件
将替换后的行写入 output.txt
sed 's/foo/bar/w output.txt' input.txt
 3.分组+后向引用

1. 分组

分组是指用括号 () 将一部分正则表达式括起来,形成一个子表达式。分组的作用包括:

  1. 捕获匹配的文本:将括号内的内容作为一个整体匹配,并捕获结果。
  2. 应用量词:对分组内的内容应用量词(如 *+? 等)。
  3. 逻辑分组:将多个字符或表达式作为一个整体处理。

2. 后向引用

后向引用是指在正则表达式中引用之前捕获的分组内容。在 sed 中,后向引用使用 \1\2\3 等表示,分别对应第 1 个、第 2 个、第 3 个分组。

echo "hello world" | sed 's/\(hello\) \(world\)/\2 \1/'\(hello\) 是第 1 个分组,捕获 hello。
\(world\) 是第 2 个分组,捕获 world。
\2 \1 表示将第 2 个分组和第 1 个分组交换位置。#将hello world中的hello和world分组,并交换位置echo "hello hello world world" | sed 's/\([a-z]\+\) \1/\1/g's/.../.../:sed 的替换命令,用于查找并替换文本。
\([a-z]\+\):
\(...\):分组,捕获括号内的内容。
[a-z]\+:匹配一个或多个小写字母。
整体表示捕获一个单词(由小写字母组成)。
\1:
\1:后向引用,引用第 1 个分组捕获的内容。
整体表示匹配一个空格后跟第 1 个分组捕获的单词。
/\1/:替换为第 1 个分组捕获的内容。
g:全局替换,替换所有匹配项。#将连续重复的单词替换为单个单词
4 变量调用

sed允许使用变量来替代文本中的特定部分。

在 sed 中使用变量时,需要注意以下几点:

  1. 变量替换:变量需要在 sed 脚本之外定义,并通过双引号 " 传递给 sed
  2. 特殊字符:如果变量中包含特殊字符(如 /\ 等),需要对其进行转义。
  3. 单引号与双引号
    • 单引号 ':sed 脚本中的内容会被视为字面量,变量不会被替换。
    • 双引号 "sed 脚本中的变量会被替换为其值。

示例 1:简单变量替换
将文本中的 foo 替换为变量 $var 的值:
var="bar"
echo "foo foo foo" | sed "s/foo/$var/g"示例 2:变量中包含特殊字符
如果变量中包含 /,需要对其进行转义:
var="path/to/file"
echo "Replace this: /path/to/file" | sed "s#/path/to/file#$var#g"
输出:Replace this: path/to/file
这里使用 # 作为分隔符,避免与 / 冲突。示例 3:多变量替换
将文本中的 foo 和 bar 分别替换为变量 $var1 和 $var2 的值:
var1="hello"
var2="world"
echo "foo bar" | sed "s/foo/$var1/; s/bar/$var2/"
输出:hello world示例 4:变量作为查找模式
使用变量作为查找模式:
pattern="foo"
echo "foo bar foo" | sed "s/$pattern/replaced/g"

三.练习

1找出/etc/passwd 文件中root 开头的行
grep    "^root"   /etc/passwd2找出/etc/passwd 含有root 的行
grep    "root"   /etc/passwd3找出/etc/passwd 文件中 root开头或 mail 开头的行
grep   -e "^root"  -e "^mail"   /etc/passwd
grep    "^root|^mail"   /etc/passwd4过滤出 /etc/passwd文件中已bin开头的行,并显示行号
grep   -n   "^bin"   /etc/passwd5过滤掉/etc/passwd文件中 root开头的行
grep  -v  "^root"   /etc/passwd6.在当前目录下所有.cc 的文件中找到含有“luckyboy”内容的文件:
find -type f -name '*.cc' | xargs grep -l "luckyboy"
find -type f -name '*.cc' -exec grep -l "luckyboy" {} \;
-l --file-with-matches # 列出文件内容符合指定的范本样式的文件名称
-r 递归查询7.找出当前目录下包含127.0.0.1关键字的文件
grep '127.0.0.1' `find . -type f `
sed -n '/127.0.0.1/p' `find . -type f`
awk '/127.0.0.1/' `find . -type f`8.删除或显示1.file 文件第3行到第7行的内容
删除:
sed -i '3,7d' 1.file  
awk '(NR>=3&&NR<=7)' 1.file  把第三行到第七行排除
显示:
sed -n '3,7p' 1.file
awk 'NR>=3 && NR<=7' 1.file9.从文件1.file中提取第3行到第7行的内容
sed -n '3,7p' 1.file 
awk 'NR==3,NR==7' 1.file 
awk 'NR>=3 && NR<=7' 1.file 
head -7 1.file | tail -510.使用awk取出/etc/passwd第一列数据也就是取出用户名。
awk -F : '{print $1}' /etc/passwd
sed 's#:.*$##g' /etc/passwd11.用命令行更改config.txt文件,把里面所有的“name”更改为“address”
sed -i 's#name#address#g' config.txt
vim config.txt:%s#name#address#g
awk '{gsub(/name/,""address)}1' config.txt12.写出查询file.txt以abc结尾的行
grep 'abc$' file.txt
sed -n '/abc$/p' file.txt
awk '/abc$/' file.txt13.删除file.txt文件中的空行
grep -v '^$' file.txt
sed '/^$/d' file.txt
awk '!/^$/' file.txt
文件中的空行可能是只有空格的行:
grep -v '^ *$' file.txt
sed -n '/^ *$/p' file.txt
awk '/^ *$/' file.txt14.打印file.txt文件中的第10行
sed -n '10p' file.txt
head -10 file.txt| tail -1
awk 'NR=10' file.txt15.删除/etc/fstab文件中所有以#开头的行,行首的#号及#后面的所有空白字符
sed -i '/^#/ s/^#[[:blank:]]*//' /etc/fstab16.查找最后修改时间是3天前,后缀是*.log的文件并删除
find /tmp/ -type -f -mtime -3 -name "*.log" | xargs rm -f
find /tmp/ -type -f -mtime -3 -name "*.log" -exec rm -f {} \;
find /tmp/ -type f -mtime +3 -name '*.log' -exec rm {} +\; -exec find 命令找出 1 个文件就把文件放在{}的位置
+;如果-exec后面使用+ find会把前面找到的所有文件1次性的放在{}所在位置17.查找文件2.txt中1到20行之间,同时将"aaa"替换为"AAA",“ddd"替换"DDD”
sed '1,20y/ad/AD/' 2.txt
sed -ne 's#a#A#g;s#d#D#g;1,20p' 2.txt 18.使用sed命令打印出文件的第一行到第三行
sed -n '1,3p'  file.txt
awk 'NR>=1&&NR<=3' file.txt
head -3  file.txt19.在/var/sync/log/cef_watchd-20080424.1og文件中查找大小写不敏感“mysql"字符串中的命令是:
grep -iw 'mysql' /var/sync/log/cef_watchd-20080424.1og20.把data目录及其子目录下所有以扩展名.txt结尾的文件中包含oldgirl的字符串全部替换为oldboy.
sed -i 's#oldgirl#oldboy#g' `find /data/ -type f -name '*.txt'`21.查看linux服务器ip的命令,同时只显示包含ip所在的行打印出来
ip a s ens33 | sed -n '3p' | sed -r 's#^.*t ([0-9].*)/.*$#\1#g'
ip a s ens33 | sed -n '3p' | awk '{print $2;}' | awk -F / '{print $1;}'
sed语法:-r  使用正则表达式 22.用awk获取文件中第三行的倒数第二列字段
awk 'NR==3{print $(NF-1)}' file.txt23.请用shell查询file1里面空行的所在行号
grep -n '^$' file.txt
awk '/^$/{print NR,$0}' file1.txt24.显示file文件里匹配foo字串那行以及上下5行、显示foo及前5行、显示foo及后5行
grep -A5 'foo'	file.txt		后5行
grep -B5 'foo'  file.txt		前5行
grep -C5 'foo' 	file.txt		上下5行25.查找file.log文件中的包含关键字“helloworld”的内容,及其上下两行的内容重定向保存到1.txt
grep -C2  'helloworld' file.log >> 5.txt26.当前系统中没有任何文本编辑器(vi,emacs,vim,edit等),如何过滤掉注释行和空行查看/etc/ssh/sshd_config文件
sed -r '/^#|^$/d' /etc/ssh/sshd_config
awk '!/^$|^#/' /etc/ssh/sshd_config 27.从a.log文件中提取包含“WARNING”或“FATAL”,同时不包含“IGNOR”行,然后,提取以“:”分割的第五个字段
awk -F:  '/WARNING|FATAL/&&!/IGNOR/{print $5}'28.文件内容排序、文件行取唯一值的命令分别是
sort
uniq   除文件中的重复内容行29.在每一行后增加一空行?
sed ‘G’ test.txt30.在匹配regex的行之后插入一空行?
sed ‘/regex/G’ text.txt31.计算文件行数?
wc -l32.sed将文件test中第50行中的haiwao改为haiwai?
sed ‘50s/haiwao/haiwai/’ test33.替换一个文件/etc/passwd里的这root:x:0:0:root:/root:/bin/bash一行第二个root为test?
sed ‘/root/s/:root:/:test:/’ /etc/passwd34.打印/etc/passwd的奇数行?
sed -n ‘1~2p’ /etc/passwd

相关文章:

正则表达式三剑客之——grep和sed

目录 一.grep 1.1定义 1.2核心功能 1.3基本语法 1.4常用选项 二.sed 2.1 定义 2.2 工作原理 2.3 基本语法 2.3.1常用选项 2.3.2sed自身脚本语法 1. 基本组成 2. 地址 3. 命令 2.3.3 sed替换查找 1 基本语法 2.sed替换查找的实例 3.分组后向引用 4 变量调…...

i18n-ai-translate开源程序,可以使用DeepSeek等模型将您的 i18nJSON翻译成任何语言

一、软件介绍 文末提供程序和源码下载 i18n-ai-translate开源程序使用 DeepSeek等模型可以将您的 i18n JSON 翻译成任何语言。 无缝翻译本地化文件。支持嵌套翻译文件的目录。需要i18next样式的JSON 文件&#xff08;文末一并提供下载&#xff09;。 二、模式 CSV 模式 三个…...

关于Android Studio的Gradle各项配置

Gradle 构建概览 Android 应用通常使用 Gradle 构建系统构建。在深入了解如何配置 build 之前&#xff0c;我们先来探索 build 背后的概念&#xff0c;以便您全面了解系统。 什么是 build&#xff1f; 构建系统会将源代码转换为可执行应用。构建通常涉及多个工具&#xff0c;用…...

数据安全和合规性市场分析

一、什么是数据安全和合规性 在数据安全和合规性方面&#xff0c;存在着一系列重要的法律、法规和行业标准&#xff0c;这些规定了组织如何收集、存储、处理和保护个人数据及其他敏感信息。企业之所以要遵守这些规定&#xff0c;是出于多方面的考量&#xff0c;既有法律责任&a…...

venv环境基础指令以及常见问题汇总(持续更新)

常见指令 在 Python 原生虚拟环境&#xff08;venv&#xff09; 中&#xff0c;没有直接列出所有虚拟环境的命令&#xff08;因为 venv 不像 Conda 那样有集中管理机制&#xff09;&#xff0c;但可以通过 文件操作 或 脚本 实现类似功能。以下是常用命令和技巧&#xff1a; &…...

思科路由器重分发(RIP动态路由+静态路由)

路由器重分发&#xff08;RIP动态路由静态路由&#xff09; 静态路由不能作翻译官 RIP需要宣告自己的ip&#xff1b;还需要帮静态路由也宣告一下开启端口并配置IP地址 RIP路由 Router>en Router#conf t Router(config)#int g0/0 Router(config-if)#no shutdown Router(c…...

产销协同的作用是什么?又如何对各部门发挥作用?

目录 一、产销协同的对象有哪些&#xff1f; 1. 客户需求 2. 市场趋势 3. 供应链伙伴 4. 企业战略目标 二、产销协同的作用是什么&#xff1f; 1. 提高客户满意度 2. 降低企业成本 3. 增强市场竞争力 4. 优化资源配置 三、产销协同对各部门怎么发挥作用&#xff1f;…...

19.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--当前项目拆分规划

随着业务规模的不断扩大和系统复杂度的提升&#xff0c;孢子记账系统需要进行微服务架构的转型。本文将详细规划从单体应用向微服务架构迁移的具体方案&#xff0c;包括功能模块分析、服务拆分、技术选型以及实施步骤等内容。通过合理的服务拆分和架构设计&#xff0c;未来我们…...

JFLAP SOFTWARE 编译原理用(自动机绘图)

csdn全是蛆虫&#xff0c;2mb的软件&#xff0c;都在那里搞收费&#xff0c;我就看不惯&#xff0c;我就放出来&#xff0c;那咋了&#xff01;&#xff01;&#xff01; https://pan.baidu.com/s/1IuEfHScynjCCUF5ScF26KA 通过网盘分享的文件&#xff1a;JFLAP7.1.jar 链接: h…...

从 Vue 到 React:React 合成事件

目录 一、什么是 React 合成事件&#xff1f;二、处理流程React 事件系统的大致流程和 Vue 3 的区别 三、用法示例四、SyntheticEvent 的特点五、为什么 React 要统一事件到根节点&#xff1f;1.减少事件监听器数量2. 简化事件解绑逻辑3. 保证一致的行为 六、React 18 后事件系…...

react的fiber 用法

在 React 里&#xff0c;Fiber 是 React 16.x 及后续版本采用的协调算法&#xff0c;它把渲染工作分割成多个小任务&#xff0c;让 React 可以在渲染过程中暂停、恢复和复用任务&#xff0c;以此提升渲染性能与响应能力。在实际开发中&#xff0c;你无需直接操作 Fiber 节点&am…...

深度学习-学习笔记

文章目录 1、概述2、学习笔记2.1、pytorch 的环境配置 1、概述 本篇博客用来记录我学习深度学习的学习笔记 参考视频&#xff1a;PyTorch深度学习快速入门教程 PyTorch 是一个开源的机器学习框架&#xff0c;主要用于构建和训练深度学习模型。 2、学习笔记 2.1、pytorch 的环…...

[创业之路-390]:人力资源 - 社会性生命系统的解构与重构:人的角色嬗变与组织进化论

前言&#xff1a; 人、财、物、信息、机制、流程、制度、方法共同组合了一个持续的消耗资源、持续的价值创造、持续面临生存与发展、遗传与变异的社会性生命系统。 "人"是所有社会性生命系统最最基础性的要素&#xff0c;它弥漫在系统中多维立体空间的不同节点上&am…...

Redis常见面试题——List对象

当然可以&#xff01;这里我帮你整理了一份【Redis中 List 结构】相关的高频面试题&#xff0c;并附上简明回答&#xff1a; &#x1f4da; Redis List 结构面试题&#xff08;高频总结版&#xff09; 1. Redis 中的 List 是什么&#xff1f;底层是什么实现的&#xff1f; 答&…...

案例速成GO操作redis,个人笔记

更多个人笔记&#xff1a;&#xff08;仅供参考&#xff0c;非盈利&#xff09; gitee&#xff1a; https://gitee.com/harryhack/it_note github&#xff1a; https://github.com/ZHLOVEYY/IT_note 安装redis客户端&#xff1a;go get github.com/redis/go-redis/v9 注意go …...

什么是WebSocket?NGINX如何支持WebSocket协议?

大家好&#xff0c;我是锋哥。今天分享关于【什么是WebSocket&#xff1f;NGINX如何支持WebSocket协议&#xff1f;】面试题。希望对大家有帮助&#xff1b; 什么是WebSocket&#xff1f;NGINX如何支持WebSocket协议&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java…...

ssm驾校预约管理系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!

摘要 伴随着我国社会的发展&#xff0c;人民生活质量日益提高。在人们出行方式上的体现就是&#xff0c;价格较为昂贵的代步工具——汽车&#xff0c;它的拥有率在我国越来越高了。而汽车的行驶速度很快&#xff0c;并且随着汽车拥有率的增加&#xff0c;城市中行驶和停靠的车…...

babel核心知识点

Babel 是一个 JavaScript 编译器&#xff0c;主要用于将 ECMAScript 2015 版本的代码转换为向后兼容的 JavaScript 代码&#xff0c;以便在旧版本的浏览器或环境中运行。以下是 Babel 的核心知识点&#xff1a; 1. 基本概念 编译器&#xff1a;Babel 本质上是一个编译器&…...

学习笔记(算法学习+Maven)

单调队列优化多重背包 #include <bits/stdc.h> using namespace std; const int M 2010; const int N 20010; int q[N]; int hh 0, tt -1; int f[N]; int g[N]; int v[M], w[M], s[M]; int n, m; int main() { cin >> n >> m; for (int i 1; …...

买币永续合约成全球交易热点,XBIT去中心化交易所平台显著提升市场流动性

在全球加密货币市场日益扩大的背景下&#xff0c;买币永续合约正展现出惊人的增长势头。虽然比特币自2021年黄金时期以来整体兴趣有所减弱&#xff0c;但永续合约市场表现亮眼&#xff0c;专业和机构交易者正从传统日历期货转向这一领域&#xff0c;使得永续合约占据了约66%的未…...

详解 `from datasets import load_dataset`:数据格式、公开数据集与自定义数据集实战指南

在自然语言处理(NLP)和机器学习领域,Hugging Face 的 datasets 库凭借其高效的数据加载和预处理能力成为开发者必备工具。本文通过代码示例详解 load_dataset 的核心用法,涵盖数据格式解析、公开数据集调用和自定义数据集构建。 一、数据格式解析与加载示例 datasets 库支…...

Eclipse 插件开发 1

Eclipse 插件开发 1 1 创建 Eclipse 插件2 特点对比表3 总结对比表 Eclipse 是一个功能强大的集成开发环境(IDE)&#xff0c;最初为 Java 开发设计&#xff0c;但现在已经支持多种语言和平台。它的核心优势在于高度可扩展的插件架构&#xff0c;使开发者能够定制开发环境以满足…...

单链表专题(1)

1.什么是链表&#xff1f; 链表是结构体变量与结构体变量连接在一起 2.动态创建一个链表 动态内存申请模块化设计 1.创建链表&#xff08;创建一个表头表示整个链表&#xff09; 2.创建结点 3.插入结点 4.删除结点 5.打印遍历链表&#xff08;测试&#xff09; 3.创建链…...

[贪心_8] 跳跃游戏 | 单调递增的数字 | 坏了的计算器

目录 1.跳跃游戏 题解 2.单调递增的数字 证明 3.坏了的计算器 题解 解法一&#xff1a;正向推导 解法二&#xff1a;正难则反 1.跳跃游戏 链接&#xff1a; 55. 跳跃游戏 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你…...

Python基于Django的全国二手房可视化分析系统【附源码】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

Spring Boot 升级指南(2.x → 3.x)

&#x1f680; Spring Boot 升级指南&#xff08;2.x → 3.x&#xff09; &#x1f522; 1️⃣ 必读文档 &#x1f4d8; 当您需要从 Spring Boot 2.x 升级时&#xff1a; • 官方迁移指南 → https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-…...

基于亚马逊云科技构建音频转文本无服务器应用程序

Amazon Transcribe是一项基于机器学习模型自动将语音转换为文本的服务。它提供了多种可以提高文本转录准确性的功能&#xff0c;例如语言自定义、内容过滤、多通道音频分析和说话人语音分割。Amazon Transcribe 可用作独立的转录服务&#xff0c;也可以集成到应用程序中提供语音…...

io_uring概述:现代 Linux 异步 IO 的新范式

一、引言 在 Linux 系统中&#xff0c;I/O 性能一直是高性能服务器、数据库、存储系统的关键瓶颈。传统的 I/O 接口&#xff08;如 read、write、poll、epoll&#xff09;已经难以满足现代高吞吐低延迟场景的需求。io_uring 的诞生&#xff0c;正是为了解决这些传统 I/O 模型中…...

定制一款国密浏览器(12):分析SM2签名算法的实现

SM2 是一种非对称加密算法,除了用来进行加密解密外,主要作用还用作数字签名。数字签名是私钥签名,公钥用来验签。由于私钥是不公开的,所以私钥签名还可以防抵赖。 一般的签名流程如下: 发送者对消息计算摘要值。发送者用私钥对摘要值进行签名得到签名值。发送者将原始消息…...

SSE协议

目录 SSE协议协议实现传输格式data 字段id 字段event 字段retry 字段 前后端实现使用案例FastAPI SSE-STARLETTE 模拟大模型推理流&#x1f5a5; 代码&#xff1a;FastAPI SSE-STARLETTE 模拟大模型推理流 SSE协议 SSE&#xff0c;全称是 Server-Sent Events&#xff0c;是一…...

精益数据分析(25/126):关键指标驱动业务发展

精益数据分析&#xff08;25/126&#xff09;&#xff1a;关键指标驱动业务发展 在创业和数据分析的道路上&#xff0c;我们都在不断探索如何利用数据实现业务的增长与优化。今天&#xff0c;让我们一起深入学习《精益数据分析》中的关键知识点&#xff0c;通过实际案例来理解…...

基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API

前言 Spring AI Alibaba 开源项目基于 Spring AI 构建&#xff0c;是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践&#xff0c;提供高层次的 AI API 抽象与云原生基础设施集成方案&#xff0c;帮助开发者快速构建 AI 应用。 项目地址 gitcode平台&#xff1a;ht…...

git 工具

Git教程 Git Bash详细教程 Git教程 Git Bash详细教程-CSDN博客 Download – TortoiseGit – Windows Shell Interface to Git...

利用【指针引用】对【非空单循环链表】进行删除操作

【非空单循环链表】是链式存储结构的其中一种&#xff0c;下面是各个词汇的意思&#xff1a; 先说【单】的意思&#xff1a; 这里指的是【单循环】的&#xff0c;另外在别的地方你会碰到一些不一样的循环链表&#xff0c;比如说是【多重链】的。 单循环 【单循环链表】常在表的…...

2025.4.26_STM32_SPI

1.SPI简介 2.硬件电路 所有SPI设备的SCK(时钟)、MOSI(主机输出从机输入)、MISO(主机输入从机输出)分别连在一起。SCK线只能被主机控制&#xff0c;和I2C相同。 主机另外引出多条SS控制线&#xff0c;分别接到各从机的SS引脚 (SS不用的时候为高电平&#xff0c;当主机需要选中某…...

基于OpenMV+STM32+OLED与YOLOv11+PaddleOCR的嵌入式车牌识别系统开发笔记

基于OpenMV、STM32与OLED的嵌入式车牌识别系统开发笔记 基于OpenMV、STM32与OLED的嵌入式车牌识别系统开发笔记系统架构全景 一、实物演示二、OpenMV端设计要点1. 硬件配置优化2. 智能帧率控制算法3. 数据传输协议设计 三、PyTorch后端核心实现&#xff1a;YOLOv11与PaddleOCR的…...

当JIT遇见K8s

目录 一、技术融合背景&#xff1a;从静态架构到动态生态的范式重构 1.1 动态编译技术的三次进化浪潮 1.2 容器编排系统的动态特性解剖 弹性伸缩的数学建模 服务质量&#xff08;QoS&#xff09;的编译场景适配 硬件拓扑感知的编译优化 二、关键技术挑战与突破性解决方案…...

单片机-89C51部分:4、固件烧录

飞书文档https://x509p6c8to.feishu.cn/wiki/M00gwFX3WilLe0kiAmBcPBUsnLc 接线 通过USB线把开发板和电脑连接起来&#xff0c;如果电脑没有安装过USB转串口驱动&#xff0c;在设备管理器中就找不到COM口&#xff0c;而且会有驱动提示叹号&#xff0c;我们可以下载下方驱动安…...

7.13 GitHub Sentinel全链路测试实战:自动化框架+零误差传输,QPS提升6倍!

GitHub Sentinel全链路测试实战:自动化框架+零误差传输,QPS提升6倍 GitHub Sentinel Agent 用户界面设计与实现 关键词:前后端联调测试、数据传输验证、接口稳定性测试、命令行工具测试、自动化测试框架 测试前后端功能与数据传输稳定性 1. 全链路测试策略设计 采用分层…...

stm32之EXIT外部中断详解

目录 1.引入: STM32F1031.1 中断路径上的3个部件1.2 STM32F103的GPIO中断1.1.1 GPIO控制器 -- AFIO1.1.2 EXTI1.1.3 NVIC1.1.4 CPU1. PRIMASK2. FAULTMASK3. BASEPRI 1.3 中断执行流程 2.旋转编码器介绍3.实验3.1 EXIT3.1.1 结构体3.1.2 函数 3.2 NVIC3.2.1 结构体3.2.2 函数 3…...

STM32 开发 - stm32f10x.h 头文件(内存映射、寄存器结构体与宏、寄存器位定义、实现点灯案例)

概述 STM32F10x.h 是 STM32F1 系列微控制器的核心头文件&#xff0c;提供了所有外设寄存器的定义和内存映射 一、内存映射 #define PERIPH_BASE ((uint32_t)0x40000000)#define APB1PERIPH_BASE PERIPH_BASE #define APB2PERIPH_BASE (PERIPH_BASE 0x…...

UniApp 的现状与 WASM 支持的迫切性

一、UniApp 的跨平台优势与性能瓶颈 UniApp 凭借“一次开发&#xff0c;多端发布”的核心理念&#xff0c;已成为跨平台开发的主流框架之一。然而&#xff0c;随着移动应用场景的复杂化&#xff08;如 3D 渲染、音视频处理、AI 推理&#xff09;&#xff0c;传统的 JavaScript…...

Prometheus、Zabbix和Nagios针对100个节点的部署设计架构图

一、Prometheus 架构图(联邦集群+分布式存储) graph TD;subgraph 全局监控层GlobalProm[Prometheus Server] -->|联邦查询| RegionalProm1[区域Prometheus]GlobalProm -->|联邦查询| RegionalProm2[区域Prometheus]GlobalProm -->|联邦查询| RegionalProm3[区域Pro…...

坚果派已适配的鸿蒙版flutter库【持续更新】

坚果派已适配的鸿蒙版flutter库 序号原仓版本适配仓文章解读是否完成1https://pub.dev/packages/fluttertoast8.2.12https://gitcode.com/nutpi/FlutterToasthttps://www.nutpi.net/thread?topicId1575是2https://pub.dev/packages/flutter_udid4.0.0https://gitcode.com/nut…...

代码随想录打卡|Day28 动态规划(理论基础、斐波那契数列、爬楼梯、使用最小花费爬楼梯)

动态规划 Part01 理论基础 代码随想录讲解链接 视频讲解链接 斐波那契数 力扣题目链接 代码随想录链接 视频讲解链接 题目描述&#xff1a; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一…...

《USB技术应用与开发》第四讲:实现USB鼠标

一、标准鼠标分析 1.1简介 1.2页面显示 其中页面显示的“”不用管它&#xff0c;因为鼠标作为物理抓包&#xff0c;里面有时候会抓到一些错误&#xff0c;不一定是真正的通讯错误&#xff0c;很可能是本身线路接触质量不好等原因才打印出来的“”。 1.3按下鼠标左键 &#x…...

elk中kibana一直处于可用和降级之间且es群集状态并没有问题的解决方法

前言 在公司部elk的时候发现kibana的web界面一直很卡&#xff0c;数据量为0也会很卡&#xff0c;es群集状态正常&#xff0c;资源足够。 报错信息 [2025-03-17T09:54:50.19400:00][INFO ][status] Kibana is now available (was degraded) [2025-03-17T09:55:03.28000:00][I…...

2025.4.26总结

今天把马良老师的《职场十二法则》看完后&#xff0c;感触极大&#xff0c;这们课程就是一场职场启蒙课。 虽然看过不少关于职场的书籍&#xff0c;但大多数是关于职场进阶&#xff0c;方法方面的。并没有解答“面对未来二三十年的职场生涯&#xff0c;我该怎么去看待自己的工…...

一、UI自动化测试01--认识和元素定位方法

目录 一、自动化测试1. 自动化应用场景2. ⾃动化测试的优缺点3. ⾃动化测试的分类 二、UI ⾃动测试1. 适合使用的项目2. 实现时机3. 常⻅的UI⾃动化测试⼯具4. Selenium 框架5. Web ⾃动化环境部署6. Web ⾃动化基本代码 二、元素定位1. 浏览器开发者⼯具⽅法1: 直接获取信息⽅…...

目标检测原理简介

目标检测是一类计算机视觉任务,简单来说,目标检测可被定义为在计算机中输入一张图像,计算机需要找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,如图一所示。目标检测是计算机视觉领域的核心问题之一,相较于最原始的将整张图片分类为某一类别,目标检测不光可…...