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

Linux文本处理三剑客(详解)

一、文本三剑客是什么?

1. 对于接触过Linux操作系统的人来说,应该都听过说Linux中的文本三剑客吧,即awk、grep、sed,也是必须要掌握的Linux命令之一,三者都是用来处理文本的,但侧重点各不相同,awk功能最强大,但也最复杂。

二、文本三剑客介绍 

1. grep

 特点

  • 使用正则表达式搜索文本
  • 匹配到的文本会显示出来并标红
  • 使用权限是所有用户

工作方式 

  • grep可以在一个或多个文件中检索,如果条件中包含了空格,需要使用双引号引起

工作结果

  • 如果搜索成功则返回为0的状态码 ,否则为1的状态码

格式

grep -参数 条件 文件名参数:-i		忽略大小写
-c		统计匹配的行数
-v		取反,不显示匹配的行-i	
-w		匹配单词
-E		等价于egrep,即启用扩展正则表达式
-n		显示行号
-rl		将指定目录内的文件打印
-A数字		匹配行及以下n行
-B数字		匹配行及以上n行
-c数字		匹配行及上下n行
-q		静默模式,没有任何内容输出,使用$?来判断是否执行成功
-o		只显示匹配的内容
示例
操作对象文件:/etc/passwd作用:  记录账户的信息,共分为7段,使用冒号分割
意义:  账户名:密码代号x: UID:GID: 注释:家目录:登录的Shell
注意:  最后一段/sbin/nologin表述不允许登录# 搜索/etc/passwd 含有root的字符串并显示行号
[root@server ~]# grep -n "root" /etc/passwd 
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin# 搜索/etc/passwd 含有sshd的字符串并显示行号
[root@server ~]# grep -n "sshd" /etc/passwd 
32:sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/sbin/nologin# 匹配/bin/bash的行数,显示行号
[root@server ~]# grep  "/bin/bash" /etc/passwd  | wc -l
22# 匹配不是/sbin/nologin的行,并显示行号
[root@server ~]# grep -nv "/sbin/nologin" /etc/passwd # -n显示行号 -i忽略大小写
[root@server ~]# grep -ni "d" /etc/passwd # 匹配含有ftp行及以上3行内容
[root@server ~]# grep -nB3 "ftp" /etc/passwd
9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10-operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

2.sed

介绍

sed命令是将一系列的编辑命令应用于批处理文本的理想工具。sed命令拥有非交互式和高效的特点,可以为用户节约大量的时间。本节将介绍sed命令的基础知识。

sed命令是一个非交互式的文本编辑器,它可以对来自文本文件以及标准输出的行进行编辑。其中,标准输出可以是来自键盘、文件重定向、字符串、变量或者是管道的文本。

sed命令会从文件或者标准输入中一次读取一行数据,将其复制到缓冲区,然后读取命令行或者脚本的编辑子命令,对缓冲区中的文本行进行编辑。重复此过程,一直到所有的文本行都处理完毕。

工作原理

  • 模式空间pattern space:sed在内存里开辟模式空间,处理文件的每个输入行,最多8192字节

  • 保留空间holding space:sed在内存里开辟保留空间,保存已经处理过的输入行,最多8192字节

原理:sed 的工作流程主要包括读取、执行和显示三个过程

  • 1.读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)

  • 2. 执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed 命令 将会在所有的行上依次执行

  • 3.显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空

  • 重复上述过程,直到将文件中所有数据处理完毕

基本语法

sed -参数	'[定址符]'  '[操作]'  文件名参数:
-n,--quiet,--silent:安静模式,不输出模式空间中的内容,在一般sed的用法中,所有来自STDIN的数据一般都会被列出到屏幕上,但如果加上-n参数后,则只有经过sed特殊处理的那一行才会被列出来
-i:  直接编辑原文件,而不是由屏幕输出,默认不对原文件进行操作
-e:  直接在命令行模式上进行sed的动作编辑,多个子命令之间也可以用分号隔开,如:sed -e command1; command2......filename  或者  sed -e 'command1'  -e 'command2'......filename
-r:使用扩展正则表达式F
-f:  直接将sed的动作写在一个文件内,-f filename则可以执行filename内的sed动作--help:显示帮助--version:显示版本-{}:  可组合多个命令,以分好隔开
定址符
  • 用于使用数字指定处理行区间,或者使用正则进行过滤

  • 表示方法

地址定界

作用
1,5对文件的1-5行进行处理
2,$对文件的2-最后一行进行处理
1,+3对文件第一行以及以后的第三行内容进行处理
1~2对文件的1,3,5,7,......的行进行处理
/正则表达式/对任何能够被正则表达式匹配带的行进行处理
操作
S: 替换,普换指定字符,一般搭配正则表达式
d: 删除,删除选定的行。
p: 打印,如果同时指定行,表示打印指定行:如果不指定行,则表示打印所有内容:如果有非打印字符,则以 ASCII 码输出。其通常与“-n” 选项一起使用。
=: 打印行号。
a: 增加,a的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
i: 插入,i的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
C: 行替换,指定行中的所有内容,普换成该选项后面的字符串。
y: 字符转换,转换前后的字符长度必须相同。
l(小写):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)
!: 对指定行以外的所有行应用命令
&: 代表匹配到的内容
详细示例
### 切记多加练习!!!
[root@server ~]# vim sed1.txt[root@server ~]# sed -n 'p' sed1.txt  #打印全文[root@server ~]# sed -n '=;p' sed1.txt # 打印全文并显示行号[root@server ~]# sed -n -e '=' -e  'p' sed1.txt [root@server ~]# sed -n 'l' sed1.txt  #打印控制字符[root@server ~]# sed -n '1p' sed1.txt  # 打印第一行[root@server ~]# sed -n '1p' sed1.txt # 不加-n会显示全部,加-n只显示处理行
[root@server ~]# 
[root@server ~]# sed -n '4,6p' sed1.txt  #打印4-6行
four
five
six[root@server ~]# sed -n '7,$p' sed1.txt # 打印7到最后一行
seven
eight
nine
ten[root@server ~]# sed -n '$p' sed1.txt #打印最后一行
ten[root@server ~]# sed -n '1~2p' sed1.txt #打印基数行
one
three
five
seven
nine[root@server ~]# sed -n '2~2p' sed1.txt  #打印偶数行
two
four
six
eight
ten
[root@server ~]# sed -n '4p;6p;8p' sed1.txt #打印4,6 8行
four
six
eight[root@server ~]# sed -n -e '4p' -e '6p' -e '8p' sed1.txt 
four
six
eight[root@server ~]# sed -n '1!p' sed1.txt #打印非第一行内容
two
three
four
five
six
seven
eight
nine
ten[root@server ~]# sed -n '1,+5p' sed1.txt  #打印第一行后的5行
one
two
three
four
five
six[root@server ~]# sed -n '/^f/p' sed1.txt  #打印f开头的行
four
five[root@server ~]# sed -n '/t/p' sed1.txt  #检索包含t的行
two
three
eight
ten[root@server ~]# sed -n '/^f/p;/t/p' sed1.txt  #检索f开头行或者包含t的行
two
three
four
five
eight
ten[root@server ~]# sed -n '2,/five/p' sed1.txt #检索第二行到five所在行
two
three
four
five[root@server ~]# sed -n '/n$/p' sed1.txt #检索n结尾的行
seven
ten[root@server ~]# sed -n 'n;p' sed1.txt #打印偶数行
two
four
six
eight
ten[root@server ~]# sed -n 'p;n' sed1.txt #打印奇数行
one
three
five
seven
nine[root@server ~]# sed -n '$=' sed1.txt #打印行数
10

文本替换

范例文件

[root@server ~]# cp /etc/passwd ~/ps
[root@server ~]# ls
公共  视频  文档  音乐  anaconda-ks.cfg  ps
模板  图片  下载  桌面  passwd           sed1.txt
格式
sed '行范围s/旧字符串/新字符串/替换标记'  处理文件名
  • 行范围:使用数字表示,即对第几行到第几行进行替换管理处理,若省略则表示进行全文处理

  • s:替换动作

  • 替换标记

1.数字: 使用1-512之间的数字,表示指定需要替换的字符串出现第几次才进行替换

2.g: 对数据中所有匹配到的内容进行替换,若省略g则只会对第一次匹配的内容进行替换

3.p:替换成功立刻打印,一般与-n一起使用D:

4.w :文件名:将缓冲区的内容写入到指定文件中

5. &: 使用正则表达式匹配的内容进行替换

6.\: 转义符,若有特殊符号或路径则需要转义

示例
# 替换root为boot
[root@server ~]# sed  's/root/boot/g' ps#将每一行的第一个root替换为admin
[root@server ~]# sed -n  's/root/admin/p' ps
admin:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/admin:/sbin/nologin#将本行第二次出现的root进行替换admin
[root@server ~]# sed -n 's/root/admin/2p' ps
root:x:0:0:admin:/root:/bin/bash#将全文所有root进行替换admin并打印
[root@server ~]# sed -n 's/root/admin/gp' ps
admin:x:0:0:admin:/admin:/bin/bash
operator:x:11:0:operator:/admin:/sbin/nologin#将第四行的adm替换为root
[root@server ~]# sed -n '4s/adm/root/p' ps #替换第一个
root:x:3:4:adm:/var/adm:/sbin/nologin
[root@server ~]# sed -n '4s/adm/root/gp' ps #加g,全行替换
root:x:3:4:root:/var/root:/sbin/nologin#将行尾的/sbin/nologin替换为/bin/bash  注意:/需要转义
[root@server ~]# sed -n 's/\/sbin\/nologin/\/bin\/bash/p' ps#注意:上例中替换内容包含路径符号/,可以使用#暂时替代sed命令中的/,可改为
[root@server ~]# sed 's#/sbin/nologin#bin/bash#p'  ps#将最后一行的:替换为@
[root@server ~]# sed -n '$s/:/@/gp' ps
fox_6@x@1000@1000@fox_6@/home/fox_6@/bin/bash#全文注释
[root@server ~]# sed  's/^/#&/p' ps #指定位置处左侧添加#
[root@server ~]# sed  's/^/#/p' ps#检索ssh行在其单词左侧添加一个#
[root@server ~]# sed -n  's/SSH/#&/gp' ps
sshd:x:74:74:Privilege-separated #SSH:/usr/share/empty.sshd:/sbin/nologin
#右侧添加#
[root@server ~]# sed -n  's/SSH/&#/gp' ps
sshd:x:74:74:Privilege-separated SSH#:/usr/share/empty.sshd:/sbin/nologin#所有的行首添加@及行尾添加@
[root@server ~]# sed -e  's/^/@&/' -e ' s/$/&@/' ps#在第一行之前插入空白行
[root@server ~]# sed  '1s/^/\n/' ps#最后一行之后插入空白行
[root@server ~]# sed  '$s/$/\n/' ps#所有小写改为大写,\u表示大写  &:启用正则
[root@server ~]# sed 's/[a-z]/\u&/g' ps#所有大写改小写,\l(小写l):表示小写字母
[root@server ~]# sed -i  's/[A-Z]/\l&/g'  ps#单词第一个字母大写 \b:表示分匹配单词的边界
[root@server ~]# sed 's/\b[a-z]/\u&/g' ps
#实战1:关闭或者打开selinux
[root@server ~]# sed -i '22s/disabled/enforcing/' /etc/selinux/config #实战2:apache的网页目录修改
[root@server ~]# yum install httpd -y
[root@server ~]# sed -i -e  '124s/\/var\/www.html/\/zy/' -e '129s/\/var\/www/\/zy/' /etc/httpd/conf/httpd.conf 
[root@server ~]# vim /etc/httpd/conf/httpd.conf 
#利用替换实现删除#将全文的root删除
[root@server ~]# sed -n 's/root//gp' ps#删除每一行的第一个字符
[root@server ~]# sed -n  's/^.//p' ps 		#.代表任意#删除每一行的最后字符
[root@server ~]# sed -n 's/.$//p' ps#删除注释符#
[root@server ~]# sed -n 's/^#//p' /etc/sos/sos.conf #删除5-10行的所有数字
[root@server ~]# sed '5,10s/[0-9]//g' ps#删除特殊字符(出来数字字母),即将结果写入到t1.txt中
[root@server ~]# sed 's/[^(0-9)(a-z)(A-Z)]//gw t1.txt' ps

文本删除

注意:d操作用于删除文本的特定航,会删除指定的所有内容,则使用该命令必须特别小心,若忘记指定处理行的话会删除所有内容,也不会任何输出

示例 
示例文件
[root@server ~]# cp /etc/sos/sos.conf ~/#删除第一行
[root@server ~]# sed '1d' sos.conf #删除2-5行
[root@server ~]# sed '2,5d' sos.conf #删除8-最后一行
[root@server ~]# sed '8,$d' sos.conf #删除最后一行
[root@server ~]# sed '$d' sos.conf #使用变量最为行号
[root@server ~]# num_line=1
[root@server ~]# sed "${num_line}d" sos.conf #注意双引号#删除空白行
[root@server ~]# sed '/^$/d' sos.conf #删除带[]
[root@server ~]# sed '/\[/d' sos.conf [root@server ~]# sed '/root/d' ps

插入文本

注意:使用a动作在文本最后追加一行,使用i动作在指定行前添加一行,俩者格式相同

 格式
sed '行范围a(或i)\新文本' 文件名
示例
[root@server ~]# sed -i '$a\192.168.228.133 www.openlab.com' /etc/hosts[root@server ~]# sed -i '3i\192.168.228.132 www.openlab.com' /etc/hosts[root@server ~]# sed -i '/132/i\192.168.228.131 www.openlab.com' /etc/hosts#注意:sed是基于数据流处理的命令,若文本无内容则无法处理,座椅空文件无法插入内容
[root@server ~]# touch t2.txt
[root@server ~]# sed -i '$a\xaio ming 19,98.5' t2.txt 
[root@server ~]# cat t2.txt 

3.awk

相关文章:

Linux文本处理三剑客(详解)

一、文本三剑客是什么? 1. 对于接触过Linux操作系统的人来说,应该都听过说Linux中的文本三剑客吧,即awk、grep、sed,也是必须要掌握的Linux命令之一,三者都是用来处理文本的,但侧重点各不相同,a…...

AI在线UI代码生成,不需要敲一行代码,聊聊天,上传图片,就能生成前端页面的开发神器

ioDraw的在线UI代码生成器是一款开发神器,它可以让您在无需编写一行代码的情况下创建前端页面。 主要优势: 1、极简操作:只需聊天或上传图片,即可生成响应式的Tailwind CSS代码。 2、节省时间:自动生成代码可以节省大…...

go-zero整合单机版ClickHouse并实现增删改查

go-zero整合单机版ClickHouse并实现增删改查 本教程基于go-zero微服务入门教程,项目工程结构同上一个教程。 本教程主要实现go-zero框架整合单机版ClickHouse,并暴露接口实现对ClickHouse数据的增删改查。 go-zero微服务入门教程:https://b…...

行政工作如何提高效率?桌面备忘录便签软件哪个好

在行政管理工作中,效率的提高无疑是每个行政人员都追求的目标。而随着科技的发展,各种便捷的工具也应运而生,其中桌面备忘录便签软件便是其中的佼佼者。那么,这类软件又如何帮助我们提高工作效率呢? 首先,…...

利用向日葵和微信/腾讯会议实现LabVIEW远程开发

利用向日葵远程控制软件结合微信或腾讯会议的视频通话功能,可以实现LabVIEW的远程开发和调试。通过向日葵进行远程桌面访问,配合视频通话工具进行实时沟通与问题解决,不仅提高了开发效率,还减少了地域限制带来的不便。介绍这种远程…...

SpringBoot 单元测试 指定 环境

如上图所示,在配置窗口中添加--spring.profiles.activedev,就可以了。...

Flutter 中的 SliverOpacity 小部件:全面指南

Flutter 中的 SliverOpacity 小部件:全面指南 Flutter 是一个功能强大的 UI 框架,由 Google 开发,允许开发者使用 Dart 语言来构建高性能、美观的跨平台应用。在 Flutter 的滚动组件体系中,SliverOpacity 是一个用来为其子 Slive…...

源码分析の前言

源码分析路线图: 初级部分:ArrayList->LinkedList->Vector->HashMap(红黑树数据结构,如何翻转,变色,手写红黑树)->ConcurrentHashMap 中级部分:Spring->Spring MVC->Spring Boot->M…...

接口性能测试复盘:解决JMeter超时问题的实践

在优化接口并重新投入市场后,我们面临着一项关键任务:确保其在高压环境下稳定运行。于是,我们启动了一轮针对该接口的性能压力测试,利用JMeter工具模拟高负载场景。然而,在测试进行约一分钟之后,频繁出现了…...

[数据集][目标检测]猕猴桃检测数据集VOC+YOLO格式1838张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1838 标注数量(xml文件个数):1838 标注数量(txt文件个数):1838 标注…...

摸鱼大数据——Hive函数7-9

7、日期时间函数 Hive函数链接:LanguageManual UDF - Apache Hive - Apache Software Foundation SimpleDateFormat (Java Platform SE 8 ) current_timestamp: 获取时间原点到现在的秒/毫秒,底层自动转换方便查看的日期格式 常用 to_date: 字符串格式时间…...

python连接数据库

python连接MYSQL、postgres、oracle等的基本操作 python连接mysql MySQLdb MySQLdb又叫MySQL-python ,是 Python 连接 MySQL 的一个驱动,很多框架都也是基于此库进行开发,只支持 Python2.x,而且安装的时候有很多前置条件&#…...

能不能接受这些坑?买电车前一定要看

图片来源:汽车之家 文 | Auto芯球 作者 | 雷慢 刚有个朋友告诉我,买了电车后感觉被骗了, 很多“坑”都是他买车后才知道的。 不提前研究,不做功课,放着我这个老司机不请教, 这个大冤种他不当谁当&…...

k8s中pod如何排错?

排除Kubernetes Pod故障通常涉及一系列步骤,以诊断问题并找到解决方案。以下是一些常见的故障排除方法: 检查Pod状态: 使用kubectl get pods查看Pod的状态。如果Pod没有处于Running状态,查看更详细的信息,使用kubectl describe …...

【手撕面试题】Vue(高频知识点二)

每天10道题,100天后,搞定所有前端面试的高频知识点,加油!!!,在看文章的同时,希望不要直接看答案,先思考一下自己会不会,如果会,自己的答案是什么&…...

四、.Net8对接Ollama实现文字翻译(.Net8+SemanticKernel+Ollama)本地运行自己的大模型

.Net8SemanticKernelOllama 一、Semantic Kernel官方定义SK能做什么? 二、基本使用1、普通对话2、使用插件实现文本翻译功能 三、IChatCompletionService、ITextGenerationService、ITextEmbeddingGenerationService 很多情况都有这样的需求,使用自有系统…...

初始C++

感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 文章目录 前言一.引用二.内联函数三.类和对象总结 前言 之前讲c的命令空间和第一个程序的运行,继…...

Chapter 5 Current Mirrors and Biasing Techniques

Chapter 5 Current Mirrors and Biasing Techniques 这一章介绍电流镜 5.1 Basic Current Mirrors MOS工作在饱和区, 表现为一个电流源. 考虑电源变化, PVT波动, 我们会首先产生一路精准电流源, 再复制这路电流. 如何复制呢? 电流转电压再转电流就行了, 如下图所示 考虑到…...

Avalonia Image控件上通过鼠标拖动画出矩形框

注册鼠标事件&#xff1a;首先&#xff0c;你需要注册 Image 控件上的鼠标事件&#xff0c;包括 PointerPressed、PointerMoved 和 PointerReleased。你可以在 XAML 文件或代码中注册这些事件。 <Image PointerPressed"Image_PointerPressed" PointerMoved"…...

Wireshark Lua插件入门

摘要 开发中经常通过抓包分析协议&#xff0c;对于常见的协议如 DNS wireshark 支持自动解析&#xff0c;便于人类的理解&#xff0c;对于一些私有协议&#xff0c;wireshark 提供了插件的方式自定义解析逻辑。 1 动手 废话少说&#xff0c;直接上手。 第一步当然是装上wiresh…...

XXE漏洞简介

目录 漏洞原理 漏洞危害 前置知识 XML简介 DTD简介 DTD的两种声明方式 实体 实体分类 内置实体(Built-inentities) 字符实体&#xff08;Characterentities&#xff09; 通用实体&#xff08;Generalentities&#xff09; 参数实体(Parameterentities) XXE漏洞…...

小白跟做江科大32单片机之蜂鸣器

1.复制之前编写的工程库项目&#xff0c;详细工程库创建过程如下链接&#xff1a; 小白跟做江科大32单片机之LED闪烁-CSDN博客https://blog.csdn.net/weixin_58051657/article/details/139295351?spm1001.2014.3001.55022.按照江科大老师给的图片进行连接蜂鸣器 接线时要用公…...

IsoBench:多模态基础模型性能的基准测试与优化

随着多模态基础模型的快速发展&#xff0c;如何准确评估这些模型在不同输入模态下的性能成为了一个重要课题。本文提出了IsoBench&#xff0c;一个基准数据集&#xff0c;旨在通过提供多种同构&#xff08;isomorphic&#xff09;表示形式的问题&#xff0c;来测试和评估多模态…...

MyEclipse使用教程

MyEclipse使用教程如下&#xff0c;按照以下步骤&#xff0c;您可以逐步熟悉并掌握MyEclipse的基本使用&#xff1a; 一、MyEclipse安装与准备 软件准备&#xff1a; 在使用MyEclipse之前&#xff0c;您需要确保已经安装了JDK&#xff08;Java Development Kit&#xff09;。J…...

TiDB学习9:Ti Cloud简介

目录 1. 为什么选择TiDB 2. 多租户 3. TiDB架构 4. 什么是TiDB Cloud 5. TiDB Cloud Provider Region 6. TiDB Cloud 入门 6.1 在浏览器中打开TiDB Cloud 6.2 创建您的账户 6.3 Developer Tier 与Dedicated Tier 6.3.1 Developer Tier 6.3.2 Dedicated Tier 6.3.2.…...

JavaScript 创建新节点的方法

在 JavaScript 中&#xff0c;可以使用 document.createElement() 方法来创建新的节点。该方法接受一个字符串参数&#xff0c;表示要创建的节点类型&#xff0c;如 "div"、"p" 等。 创建一个新节点的基本步骤如下&#xff1a; 使用 document.createElem…...

在phpstorm2024版里如何使用Jetbrains ai assistant 插件 ?

ai assistant激活成功后&#xff0c;如图 ai assistant渠道&#xff1a;https://web.52shizhan.cn/activity/ai-assistant 在去年五月份的 Google I/O 2023 上&#xff0c;Google 为 Android Studio 推出了 Studio Bot 功能&#xff0c;使用了谷歌编码基础模型 Codey,Codey 是…...

进程间通信(27000字超详解)

&#x1f30e;进程间通信 文章目录&#xff1a; 进程间通信 进程间通信简介       进程间通信目的       初识进程间通信       进程间通信的分类 匿名管道通信       认识管道       匿名管道       匿名管道测试       管道的四种…...

一、大模型推理

https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md https://github.com/hiyouga/LLaMA-Factory/blob/main/examples/README_zh.md 安装 v7.1 https://github.com/hiyouga/LLaMA-Factory/releases/tag/v0.7.1 git clone --depth 1 https://github.com/hiyoug…...

.NET IoC 容器(三)Autofac

目录 .NET IoC 容器&#xff08;三&#xff09;AutofacAutofacNuget 安装实现DI定义接口定义实现类依赖注入 注入方式构造函数注入 | 属性注入 | 方法注入注入实现 接口注册重复注册指定参数注册 生命周期默认生命周期单例生命周期每个周期范围一个生命周期 依赖配置Nuget配置文…...

Day44 动态规划part04

背包问题 01背包问题&#xff1a;每件物品只能用一次完全背包问题&#xff1a;每件物品可以使用无数次 01背包问题 暴力解法&#xff1a;每一件物品其实只有两个状态&#xff0c;取或者不取&#xff0c;所以可以使用回溯法搜索出所有的情况&#xff0c;那么时间复杂度就是 o…...

html期末复习速览

一.基础标签 1.段落标签<p></p> 特点&#xff1a;分段分割 2.标题标签<h1></h1>……<h6></h6> 特点&#xff1a;文字加粗&#xff0c;单独占一行 3.换行标签<br /> 特点&#xff1a;单标签&#xff0c;强制换行 二.文本格式化…...

CTFHUB-信息泄露-目录遍历和PHPINFO

目录 目录遍历 PHPINFO 目录遍历 很简单&#xff0c;挨着把每个目录都点开看一下 发现2目录下有个 flag.txt 文件&#xff0c;点开发现了本关的flag PHPINFO 这关也很简单&#xff0c;进来之后是一个phpinfo页面&#xff0c;按 CTRL F键打开查询&#xff0c;输入flag&#…...

面向Java程序员的Go工程开发入门流程

对于一个像我这样没有go背景的java程序员来说&#xff0c;使用go开发一个可用的程序的速度是肉眼可见的缓慢。 其难点不在于go语言本身&#xff0c;而是搭建整个工程链路的过程&#xff0c;即所谓的“配环境”。 本文主要讲述如何配出一个适合go开发的环境&#xff0c;以免有同…...

vue3开发高德地图

在vue3的index.html 使用动态注入地址名和key <html lang"en"><head><meta charset"UTF-8" /><link rel"icon" type"image/svgxml" href"/vite.svg" /><meta name"viewport" conten…...

通过DLL方式链接glfw3.dll

主要是CMakeLists.txt文件变化 cmake_minimum_required(VERSION 3.10) project(glfwTest) set(CMAKE_CXX_STANDARD 11) aux_source_directory(. SRC_SOURCES) set(GLFW_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include) set(GLFW_LIBRARY_DIR ${CMAKE_SOURCE_DIR}/lib/glfw) add_ex…...

Python自然语言处理(NLP)库之NLTK使用详解

概要 自然语言处理(NLP)是人工智能和计算机科学中的一个重要领域,涉及对人类语言的计算机理解和处理。Python的自然语言工具包(NLTK,Natural Language Toolkit)是一个功能强大的NLP库,提供了丰富的工具和数据集,帮助开发者进行各种NLP任务,如分词、词性标注、命名实体…...

sqoop操作

介绍 sqoop是隶属于Apache旗下的, 最早是属于cloudera公司的,是一个用户进行数据的导入导出的工具, 主要是将关系型的数据库(MySQL, oracle...)导入到hadoop生态圈(HDFS,HIVE,Hbase...) , 以及将hadoop生态圈数据导出到关系型数据库中 操作 将数据从mysql中导入到HDFS中 1.全量…...

【Qt秘籍】[002]-开始你的Qt之旅-下载

一、Qt的开发工具有哪些&#xff1f; Qt的开发工具概述Qt支持多种开发工具&#xff0c;其中最常见的开发工具是 1.QtCreator 【易上手/有少量bug/适合新手】 2.VisualStudio 【功能强大/易出错/需要更多额外配置】 3.Eclipse 【清朝老兵IDE/不建议使用】 【注意&#xff1…...

【自动驾驶】点与向量从ego系转odometry系

1.点从ego系转odometry系(ego -> odometry) struct Point {float x;float y;float angle; }; Point trans; // is the odom to ego transform Point odom_coord; is the odom coord Point ego_coord; is the ego coordfloat odom_coord.x = (ego_coord.x - trans.x) * st…...

jsmug:一个针对JSON Smuggling技术的测试PoC环境

关于jsmug jsmug是一个代码简单但功能强大的JSON Smuggling技术环境PoC&#xff0c;该工具可以帮助广大研究人员深入学习和理解JSON Smuggling技术&#xff0c;并辅助提升Web应用程序的安全性。 背景内容 JSON Smuggling技术可以利用目标JSON文档中一些“不重要”的字节数据实…...

Qt 控件提升

什么是控件提升&#xff08;Widget Promotion&#xff09; 控件提升是一个在Qt编程中常见但容易被忽视的概念。简单来说&#xff0c;控件提升就是将一个基础控件&#xff08;Base Widget&#xff09;转换为一个更特定、更复杂的自定义控件&#xff08;Custom Widget&#xff09…...

封装一个websocket,支持断网重连、心跳检测,拿来开箱即用

封装一个websocket&#xff0c;支持断网重连、心跳检测 代码封装 编写 WebSocketClient.js import { EventDispatcher } from ./dispatcherexport class WebSocketClient extends EventDispatcher {constructor(url) {console.log(url, urlurl)super()this.url url}// #soc…...

推荐一款开源电子签章/电子合同系统

文章目录 前言一、项目介绍二、项目地址三、技术架构四、代码结构介绍五、功能模块六、功能界面首页面手写签名面板电子印章制作数字证书生成 总结 前言 大家好&#xff01;我是智航云科技&#xff0c;今天为大家分享一个免费开源的电子签字系统。 一、项目介绍 开放签电子签…...

Qt Creator(Qt 6.6)拷贝一行

Edit - Preference - Environment&#xff1a; 可看到&#xff0c;拷贝一行的快捷键是&#xff1a; ctrl Ins...

红队内网攻防渗透:内网渗透之数据库权限提升技术

红队内网攻防渗透 1. 内网权限提升技术1.1 数据库权限提升技术1.1.1 数据库提权流程1.1.1.1 先获取到数据库用户密码1.1.1.2 利用数据库提权工具进行连接1.1.1.3 利用建立代理解决不支持外联1.1.1.4 利用数据库提权的条件及技术1.1.2 Web到Win-数据库提权-MSSQL1.1.3 Web到Win-…...

从0开始制作微信小程序

目录 前言 正文 需要事先准备的 需要事先掌握的 什么是uniapp 平台应用的分类方式 什么是TypeScript 创建项目 项目文件作用 源码地址 尾声 &#x1f52d; Hi,I’m Pleasure1234&#x1f331; I’m currently learning Vue.js,SpringBoot,Computer Security and so on.&#x1…...

Linux学习笔记:日志文件的编写

日志文件Log.hpp 日志文件的作用简单的日志文件编写 日志文件的作用 日志文件可以很好的帮我们显示出程序运行的信息,例如,进程pid,运行时间,运行状况等,通过日志记录程序的执行路径、变量值、函数调用等&#xff0c;可以帮助我们快速定位和修复代码中的错误。 简单的日志文件…...

为什么要保持方差为1

1.数值稳定性&#xff1a; 在机器学习和深度学习中&#xff0c;维持激活函数输入的方差在一个合理范围内&#xff08;如1&#xff09;是很重要的&#xff0c;这有助于防止在训练过程中发生梯度消失或梯度爆炸的问题。如果方差过大或过小&#xff0c;经过多层网络后输出结果的方…...

Wpf 使用 Prism 实战开发Day31

登录数据绑定 1.首先在LoginViewModel 登录逻辑处理类中&#xff0c;创建登录要绑定属性和命令 public class LoginViewModel : BindableBase, IDialogAware {public LoginViewModel(){ExecuteCommand new DelegateCommand<string>(Execure);}public string Title { ge…...