Linux系统Shell脚本-----------正则表达式 、grep、 sed

一、正则表达式

1.前言


正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。在Linux中也就是代表我们定义的模式模板,Linux工具可以用它来过滤文本。

Linux的工具(如sed编辑器或者gawk程序)能够在处理数据时使用正则表达式对数据进行模式匹配,如果数据符合匹配的要求,那么就会进入下一步处理;如果数据不符合匹配的要求,就会被过滤掉。

通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。

正则表达式被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql 等

主要用来匹配字符串(命令结果,文本内容)

2.正则表达式介绍

1、正则表达式---通常用于判断语句中,用来检查某一字符串是否满足某一格式

2、正则表达式是由普通字符与元字符组成

3、普通字符包括大小写字母、数字、标点符号及一些其他符号

4、元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式

3.正则表达式类型

  • 基本正则表达式  (BRE :basic regular expression)

  • 扩展正则表达式  (ERE:xtended regular expression)

  • 编程语言支持的高级正则表达式

man 7 regex
可以使用 man手册帮助

基本正则表达式 、 扩展正则表达式 的区别是不用写   \ (意思是转义)

grep sed  默认使用基础正则表达式
grep -E、 sed -r、   egrep、  awk  扩展正则表达式

4.正则表达式特点

元字符:预定义好的具有特殊含义的符号,这些符号能够进行通配

写正则表达式不难

可读性非常的差

二、基本正则表达式

1.元字符(字符匹配)

  • 普通字符包括大小写字母、数字、标点符号及一些其他符号。
  • 元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符( 即位于元字符前面的字符)在目标对象中的出现模式。

元字符:

注册用户   数字字母组成        20字符

\转义字符,可以把一些特殊的符号转换成普通的符号字符,还可以把一些普通字符转换成特殊功能,例:\!、\n、\$等
^表示匹配字符串开始的位置,匹配行首 例如: ^a    ^the    ^#   ^[a-z]
$表示匹配字符串结束的位置,例: word$
^$匹配空行
.匹配除\n之外的任意的一个字符,表示任意单个字符 例: go.d、 g…d
*匹配前面子表达式0次或者多次,例: goo*d、go.*d
.*

前面字符可以出现无数次,一到正无穷次,

但出现0次,不能匹配;最少出现一次

[ ]匹配[ ]中包含的任一字符,单个字符
[^] 匹配指定范围外的任意单个字符,示例:[^zhou]   [^a.z]    [a.z]
[^] 匹配指定范围外的任意单个字符,示例:[^zhou] [^a.z] [a.z]
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 包括空格、制表符 (水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
\w #匹配单词构成部分,等价于[_[:alnum:]]
\W #匹配非单词构成部分,等价于[^_[:alnum:]]
\S     #匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\s     #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意Unicode 正则表达式会匹配全角空格符


.  在方框中只代表  .  

.  不在方框中代表单个字符

[^]    匹配指定范围外的任意单个字符,示例: [^a.z]        [a.z]

标准格式   需要加  '   '   或者 "   "

abc   匹配字符串”abc",普通字符的匹配

[abcde ...]   匹配中括号内的任意单个字符
a[xyz]b    axb、ayb、azb,不能匹配aab amb

\n :匹配换行符
\t :匹配制表符
\w :匹配单词字符 [a-zA-Z0-9_]
\W :匹配非单词字符 [^a-zA-Z0-9_]
\s :匹配空白字符
\S :匹配非空白字符
\d :匹配数字
\D :匹配非数字
. 表示匹配任意单个字符

字符组:

普通中括号包围的字符组:表示某单个字符匹配中括号内的任一字符即匹配成功

x[abc]z:可以匹配包含”xaz” 、 "xbz"、"xcz"的字符串

取反表示法:中括号内开头使用^,表示只要不是中括号中的字符就匹配

x[^abc]z :可匹配包含"xdz"、“xez"等的字符串,但不能匹配包含"xaz”、“xbz”、“xcz”的字符串

范围表示法:

[a-z]:代表任一单个小写字母
[^a-z]:只要单个非小写字母的其它任一单个字符
[A-Z]:代表任一单个大写字母
[0-9]:代表任一单个数字

注:[0-59]   表示匹配0 、1、2、3、4、5、9 而不是0到59中间的数值

[a-z0-9A-Z]:代表任一字母或数字
[a-z0-9A-Z_]:代表任一字母、数字或下划线,即匹配单词字符 (word)
[A-z]或[a-Z]”: 建议不要使用这种横跨大小写字母的范围表达式,不同地方表达的含义不同,甚至有些按照字典顺序排序时,[a-d] 不是等价于abcd,而是等价于aBbCcDd。如果想要等价于abcd,应将locale环境设置为LC_ALL=C

特殊元字符在中括号中的匹配:
想要在中括号中匹配 ^  需将其放在中括号的非开头位置,如 [a^]

想要在中括号中匹配 -   需将其放在开头位置或结尾位置,如 [abc-] 、 [-abc] 

2.表示次数

*           #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.*          #任意长度的任意字符  不包括0次     
\?          #匹配其前面的字符出现0次或1次,即:可有可无
\+          #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\}       #匹配前面的字符n次
\{m,n\}     #匹配前面的字符至少m次,至多n次
\{,n\}      #匹配前面的字符至多n次,<=n
\{n,\}      #匹配前面的字符至少n次

  *   匹配前面子表达式出现0次或者多次

.*       任意长度的任意字符  不包括0次     至少出现1次

\?     匹配其前面的字符出现0次或1次,即:可有可无

\+   匹配其前面的字符出现最少1次, 即:肯定有且 >=1 次

\{n\}       匹配前面的字符n次

\{m,n\}    匹配前面的字符至少m次,至多n次

\{n,\}     匹配前面的字符至少n次

\{,n\}     匹配前面的字符最多n次

3.位置锚定

^ #行首锚定, 用于模式的最左侧
$ #行尾锚定,用于模式的最右侧
^PATTERN$ #用于模式匹配整行 (单独一行  只有root)
^$ #空行   
^[[:space:]]*$ #  空白行    tab   换行  回车


\< 或 \b        #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)
\> 或 \b        #词尾锚定,用于单词模式的右侧
\<PATTERN\>     #匹配整个单词

\root\

4.分组或其他

分组:( ) 将多个字符捆绑在一起,当作一个整体处理,如:(root)+

后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名

方式为: \1, \2, \3, ... 分组

\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

或者
或者:\|

三、扩展正则表达式(表示字符相差不大)

grep -E

egrep 默认使用的 是扩展正则表达式

表示次数

*         匹配前面字符任意次
?        表示匹配前面的子表达式0或者1次
+        表示匹配前面的子表达式1次以上 (1次或多次)
{n}      匹配n次
{m,n}   至少m,至多n次
{,n}      匹配前面的字符至多n次,<=n,n可以为0
{n,}      匹配前面的字符至少n次,<=n,n可以为0

表示分组

( )

将括号里的内容看成一个整体
|以或的方式匹配字符串
+表示匹配前面的子表达式1次以上 (1次或多次)
表示匹配前面的子表达式0或者1次
分组:() 将多个字符捆绑在一起,当作一个整体处理,如:\(root\)+
后向引用:\1, \2, ...   
 | 或者  
a|b         #a或b
C|cat      #C或cat
(C|c)at    #Cat或cat

实验:

匹配 qq号    (一般qq号5到12位)

匹配 手机号    (一般11位)

匹配邮箱

四、grep

格式:  grep [选项]… 查找条件 目标文件              

grep 默认使用基础正则表达式

-m     #匹配#次后停止      匹配到 #行 停止   

-v     显示不被pattern匹配到的行,即取反

-i     忽略字符大小写

-n     显示匹配的行号

-c     统计匹配的行数 ,统计匹配到的行数

-o    仅显示匹配到的字符串

-q      静默模式,不输出任何信息    写脚本用哦

面试题: -A   -B  -C  这三个选项

-A          #after, 后#行 

-B        #before, 前#行

-C         #context, 前后各#行

-e     实现多个选项间的逻辑or关系     如:grep –e ‘cat ' -e ‘dog' file

-w       匹配整个单词

-E 使用ERE,相当于egrep   

-f   file 根据模式文件,处理两个文件相同内容 把第一个文件作为匹配条件   grep  -f   a    b
-r   递归目录,但不处理软链接     开始搜索目录
-R   递归目录,但处理软链接

面试题:

统计当前主机的连接状态             ss -nta | grep -v '^State' |cut -d" " -f1|sort |uniq -c

统计当前连接主机数                 ss -nt |tr -s " "|cut -d " " -f5|cut -d ":" -f1 |sort|uniq -c           

五、sed

sed 即 Stream EDitor,和 vi 不同,sed是行编辑器

Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(PatternSpace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。如果使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开。Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快

1.sed概述

sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。

2.sed的工作流程

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

读取∶ sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中 (又称模式空间,pattern space)
执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址, 否则sed 命令将会在所有的行上依次执行。
显示∶发送修改后的内容到输出流。在发送数据后, 模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

在所有的文件内容都被处理完成之前,上述过程将重复执行, 直至所有内容被处理完
注意∶ 默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。

3.sed与vi的区别

vi命令打开文件是一次性将文件加载到内存,然后再打开。

Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快。

4.基本用法

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

5.sed脚本语法及命令

单引号中间需要写脚本;脚本格式如下:

'地址+命令' 组成     

地址:

1. 不给地址:对全文进行处理(比如行号)
2. 单地址:
   #:指定的行,$:最后一行
   /pattern/:被此处模式所能够匹配到的每一行,正则表达式
3. 地址范围:
   #,#     #从#行到第#行,3,6 从第3行到第6行
   #,+#   #从#行到+#行,3,+4 表示从3行到第7行
   /pat1/,/pat2/    第一个正则表达式和第二个正则表达式之间的行
   #,/pat/  从#号行为开始找到 pat为止 
   /pat/,#  找到#号个pat为止
4. 步进:~
     1~2 奇数行
     2~2 偶数行
sed -n 'n;p' testfile1		#打印偶数行
ed -n '2,${n;p}' testfile1

 不给地址:对全文进行处理(比如行号)

命令

p 打印当前模式空间内容,追加到默认输出之后
Ip 忽略大小写输出
d 删除模式空间匹配的行,并立即启用下一轮循环
a [\]text 在指定行后面追加文本,支持使用\n实现多行追加
i [\]text 在行前面插入文本
c [\]text 替换行为单行或多行文本
w file 保存模式匹配的行至指定文件   seq 10 |sed -n '2wa.txt'
r file 读取指定文件的文本至模式空间中匹配到的行后    seq 10|sed '2r /etc/issue'
= 为模式空间中的行打印行号   sed '2=' /etc/passwd      sed -n -e '=;p' /etc/passwd
! 模式空间中匹配行取反处理seq 10 |sed -n '1~2!p'
q           结束或退出sed     seq 10 | sed '3q'

①sed脚本语法:地址+sed自己脚本命令,地址即范围例如全文或第一行,第一行至第三行等范围

②sed脚本命令:

p  打印当前模式空间内容  使用时关闭自动打印功能结合 -n 选项使用

q       结束或退出sed   

d      删除模式空间匹配的行,并立即启用下一轮循环

a   [\]text   在指定行后面追加文本,支持使用\n实现多行追加

i   [\]text   在行前面插入文本

c  [\]text 替换行为单行或多行文本

=   为模式空间中的行打印行号

w      file(文件) 保存模式匹配的行至指定文件

r       file 读取指定文件的文本至模式空间中匹配到的行后 

地址范围:

 不给地址:对全文进行处理(比如行号)

 #,#    #从#行到第#行

 /pat1/,/pat2/    第一个正则表达式和第二个正则表达式之间的行

步进:~
     1~2 奇数行
     2~2 偶数行

高级用法: 

sed -n 'n;p' testfile1        #打印偶数行
ed -n '2,${n;p}' testfile1

面试题:

如何打印一段时间间的日志

6.sed选项

常用选项:

-n 不输出模式空间内容到屏幕,即不自动打印
-e 多点编辑[root@www data]#sed -n -e '/^r/p'  -e'/^b/p' /etc/passwd
-f FILE 从指定文件中读取编辑脚本
-r, -E 使用扩展正则表达式
-i.bak 备份文件并原处编辑

-i.bak 备份文件并原处编辑

-n 不输出模式空间内容到屏幕,即不自动打印,关闭自动打印

7.sed查找替换使用

s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
替换修饰符:
g 行内全局替换
p 显示替换成功的行
w   /PATH/FILE 将替换成功的行保存至文件中
I,i   忽略大小写

格式:sed '/可使用正则表达式选择范围/' s/查找内容/替换内容/g

            g表示全文,固定格式的///可以用###等符号替换

注意:查找内容可使用正则表达式,替换内容不可使用正则表达式

-i选项 备份selinux配置文件后缀加.bak  在config文件中找到SELINUX=enforcing修改为SELINUX=disabled,g表示所有搜索到的内容都替换。

分组替换:

只有扩展正则表达式才可以实现分组替换

分组后向引用

( )内的按顺序标为123 ,引用时\1调用第一个()的内容,\n表示调用第n个()的内容。

.*表示任意长度字符不管是什么字符

  1. -n选项关闭自动打印,-r选项开启扩展正则表达式

  2. 's///'查找替换标准格式。三个()括起来的内容分别表示元素123,调用时改变调用顺序打印即可改变内容顺序

取ip地址

方法一:

ifconfig ens33 |sed -nr   's/.*inet (.*) netmask.*/\1/p'


#查看ens33的网卡信息传给sed处理,-n选项关闭自动打印,-r选项开启扩展正则表达式
's///'查找替换标准格式,.*inet 表示以inet为止的前面所有字符 (.*) 括号表示使用反向引用
.*表示该处的任意字符 netmask.*表示以netmask开头后面的所有字符。\1表示反向引用第一个()的
内容,p表示打印出来。

方法二:

ifconfig ens33|sed -rn '2s/.*inet ([0-9.]+) .*/\1/p'

8.变量

使用sed查询是可以直接调用变量,注意必须用“ ”号或者俩个双引号,单引号不识别变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/357189.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAI实例研究(3)

实例3 creature.id 16295&#xff08;smart_script.entryorguid&#xff09;的SAI设置&#xff1a; 共分为0和1两个事件阶段 第0阶段&#xff1a; 第1条(id 0&#xff09; 当 creature 刷新时&#xff08;event_type 11&#xff09;&#xff0c;creature 对自身&#xff0…

【网络】传输层TCP协议 | 三次握手 | 四次挥手

目录 一、概述 2.1 运输层的作用引出 2.2 传输控制协议TCP 简介 2.3 TCP最主要的特点 2.4 TCP连接 二、TCP报文段的首部格式 三、TCP的运输连接管理 3.1 TCP的连接建立(三次握手) 3.2 为什么是三次握手&#xff1f; 3.3 为何两次握手不可以呢&#xff1f; 3.4 TCP的…

ChatGPT4 比 ChatGPT3.5 强在了那里?

刚开始的时候我还在纠结&#xff0c;一个月20 刀的ChatGPT4 &#xff0c;到底值不值这个价钱&#xff1f;使用过后发现&#xff0c;诶嘛真香。因为 GPT4 比 GPT3.5 多了太多功能&#xff0c;特别是识图能力&#xff0c;用好的话效率翻倍。 1. 看图写代码 ChatGPT4 相比 ChatG…

colab使用自己数据集进行模型训练的方法汇总

在 Google Colab 上使用自己的数据集进行模型训练。Colab 允许通过多种方式上传数据&#xff0c;包括直接从本地计算机上传、从 Google Drive 加载或通过网络链接下载&#xff0c;从github导入等。 GitHub导入 使用以下的代码将github上的文件克隆到colab的当前目录下 !git …

除了Adobe之外,还有什么方法可以将Excel转为PDF?

前言 Java是一种广泛使用的编程语言&#xff0c;它在企业级应用开发中发挥着重要作用。而在实际的开发过程中&#xff0c;我们常常需要处理各种数据格式转换的需求。今天小编为大家介绍下如何使用葡萄城公司的的Java API 组件GrapeCity Documents for Excel&#xff08;以下简…

vue3使用AntV G6 (图可视化引擎)历程[三]

上期回顾&#xff1a;历程[二]描述了节点抽离自定义节点并做数据静态渲染。下面这篇继续描述节点升级版的模块化抽离以及动态数据渲染 官网地址&#xff1a;https://g6-next.antv.antgroup.com/manual/introduction “antv/g6”: “^4.8.24” 一、 案例效果 二、自定义节点的模…

第九节HarmonyOS 常用基础组件14-DataPanel

1、描述 数据面板组件&#xff0c;用于将多个数据占比情况使用占比图进行展示。 2、接口 DataPanel(options:{values: number[], max?: numner, type?: DataPanelType}) 3、参数 参数名 参数类型 必填 描述 values number[] 是 数据值列表&#xff0c;最多含9条数…

SpringCloud微服务常见问题

1 微服务 返回面试宝典 问题1 SpringCloud常见组件有哪些&#xff1f; SpringCloud包含的组件很多&#xff0c;有很多功能是重复的&#xff0c;其中最常见的组件包括&#xff1a; 注册中心组件&#xff1a;Eureka、Nacos等&#xff1b;负载均衡组件&#xff1a;Ribbon&…

Spring Security的入门案例!!!

一、导入依赖 <dependencies><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--security--><dependency><groupId>…

如何获得《幻兽帕鲁》隐藏帕鲁唤夜兽?13000个配种配方查询 幻兽帕鲁Steam好评率还在涨 Mac苹果电脑玩幻兽帕鲁 Crossover玩Windows游戏

《幻兽帕鲁》是一款Steam平台热门游戏&#xff0c;开放式大陆和养成式冒险结合&#xff0c;成为2024首款热门游戏&#xff0c;不过由于官方仅发布了Windows版的游戏客户端&#xff0c;Mac用户无法直接玩&#xff0c;好在有Crossover这样的神器&#xff0c;让苹果电脑也能玩上《…

OCP NVME SSD规范解读-8.SMART日志要求-2

SMART-7&#xff1a; 软错误ECC计数可能是记录了被第一级ECC&#xff08;比如LDPC Hard Decode&#xff09;成功纠正过的读取错误次数。这意味着数据恢复成功&#xff0c;但依然表明存储介质出现了某种程度上的可靠性下降。 LDPC码是一种基于稀疏矩阵的纠错码&#xff0c;它由…

WebGL 入门:开启三维网页图形的新篇章(下)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

go基础-垃圾回收+混合写屏障GC全分析

垃圾回收(Garbage Collection&#xff0c;简称GC)是编程语言中提供的自动的内存管理机制&#xff0c;自动释放不需要的对象&#xff0c;让出存储器资源&#xff0c;无需程序员手动执行。 Golang中的垃圾回收主要应用三色标记法&#xff0c;GC过程和其他用户goroutine可并发运行…

高端车规MCU的破局之路

目录 1 低质量的无效内卷 2 高端车规MCU产品共性 2.1 支持标定测量 2.2 低延迟通信加速 2.3 完备的网络安全解决方案 2.4虚拟化 3 国产替代的囚徒困境 1 低质量的无效内卷 近几年&#xff0c;车规MCU国产替代的呼声此消彼长&#xff0c;但仍然集中在低端产品。 从产…

网络安全知识和华为防火墙

网络安全 网络空间安全 ---Cyberspace 2003年美国提出的网络空间概念 ---一个由信息基础设施组成的互相依赖的网络。 我国官方文件定义&#xff1a;网络空间为继海、陆、空、天以外的第五大人类互动领域。 通信保密阶段 --- 计算机安全阶段 --- 信息系统安全 --- 网络空间安…

引用httplib时报undefined reference to `__imp_WSASocketW‘的解决方案

报错信息如下&#xff1a; undefined reference to __imp_getaddrinfo undefined reference to __imp_WSASocketW’ undefined reference to __imp_socket undefined reference to __imp_setsockopt’ undefined reference to __imp_setsockopt undefined reference to __imp_…

主从数据库MySQL服务重启步骤与注意事项

主从数据库MySQL服务重启步骤与注意事项 实验环境&#xff1a; 172.20.26.34 &#xff08;主应用服务器&#xff09; 172.20.26.26 &#xff08;备应用服务器&#xff09; 172.20.26.37 &#xff08;主库服务器&#xff09; 172.20.26.38 &#xff08;从库服务器&…

防御保护----防火墙基本知识

一.防火墙的基本知识--------------------------------------------------------- 防火墙&#xff1a;可以想象为古代每个城市的城墙&#xff0c;用来防守敌军的攻击。墙&#xff0c;始于防&#xff0c;忠于守。从古至今&#xff0c;墙予人以安全之意。 防火墙的主要职责在于&…

【客户端性能测试】手机设备的“高中端”怎么判断

在做客户端性能测试的时候&#xff0c;选择手机是一个老大难话题了&#xff0c;我们不可能随便拿一台设备就开工&#xff0c;最少也得选择高端机、终端机、低端机来看看结果。 一、先上科普 1.1 SoC 1.2 CPU 1.3 厂商rom 1.4 XXXm 二、划分思路 2.1 思路【目前是没有市面…

python字典JSON 和csv文件

JSON与Python字典 Python中的字典与JSON非常类似而且支持嵌套结构。Json通过key取值的过程和python字典通过索引取值过程完全一致。JavaScript数据类型&#xff08;值&#xff09;对应的Python数据类型&#xff08;值&#xff09; JSONPythonobjectdictarraylist/tuplestring…
最新文章