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.mzph.cn/news/655259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue实现跳转传参查询

vue实现跳转传参查询&#xff1a; 应用场景&#xff1a;外部链接携参跳转目标页时,避免多次输入查询信息查询 目标需求&#xff1a;登录及非登录状态均可跳转自动查询 避坑指南&#xff1a;token失效时需要重新缓存及路由导航缓存判断 简单实现&#xff1a;缓存信息&#xff0c…

LLM之makeMoE:makeMoE的简介、安装和使用方法、案例应用之详细攻略

LLM之makeMoE&#xff1a;makeMoE的简介、安装和使用方法、案例应用之详细攻略 目录 makeMoE的简介 1、对比makemore 2、相关代码文件 makMoE_from_Scratch.ipynb文件 makeMoE_Concise.ipynb文件 makeMoE的安装和使用方法 1、基于Databricks使用单个A100进行开发 makeM…

线程锁多线程的复习

线程 实现方式3种乐观锁&悲观锁线程池线程池总结 进程:是正在运行的程序 线程:是进程中的单个顺序控制流,是一条执行路径 实现方式3种 1.Thread //步骤一:定义一个继承Thread的类 //步骤二:再定义的类中重写run()方法 //步骤三:创建定义类对象 //步骤四:启动线程 class M…

Armv8-M的TrustZone技术之在安全状态和非安全状态之间切换

Armv8-M安全扩展允许在安全和非安全软件之间直接调用。 Armv8-M处理器提供了几条指令来处理状态转换: 下图显示了安全状态转换。 如果入口点的第一条指令是SG且位于非安全可调用内存位置中,则允许从非安全到安全软件的直接API函数调用。 当非安全程序调用安全API时,API通过…

vue中的vuex

在Windows的应用程序开发中&#xff0c;我们习惯了变量&#xff08;对象&#xff09;声明和使用方式&#xff0c;就是有全局和局部之分&#xff0c;定义好了全局变量&#xff08;对象&#xff09;以后在其他窗体中就可以使用&#xff0c;但是窗体之间的变量&#xff08;对象&am…

20240129收获

今天终于发现《八部金刚功》第五部我一直做的是错的&#xff0c;嗨。这里这个写法非常聪明&#xff0c;创立的数组&#xff0c;以及用obj[key] item[key]这样的写法&#xff0c;这个写法充分展示了js常规写法中只有等号右边会去参与运算&#xff0c;等号左边就是普通的键的写法…

项目实现网页分享QQ空间功能

文章目录 &#x1f412;个人主页&#x1f3c5;Vue项目常用组件模板仓库&#x1f4d6;前言&#xff1a;&#x1f380;源码如下&#xff1a; &#x1f412;个人主页 &#x1f3c5;Vue项目常用组件模板仓库 &#x1f4d6;前言&#xff1a; 本篇博客主要提供“点击转发按钮&#x…

TensorFlow2实战-系列教程9:RNN文本分类1

&#x1f9e1;&#x1f49b;&#x1f49a;TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 1、文本分类任务 1.1 文本分类 数据集构建&#xff1a;影评数据集进行情感分析&…

Hana SQL+正则表达式

目录 一、Pre 前言 二、知识点拆解 1&#xff09;case when…then…else 2&#xff09;json_value 函数 拓展资料 3&#xff09;CAST 函数 拓展资料 4) ROUND 函数 5&#xff09;occurences_regexpr 函数 拓展资料 6&#xff09;正则表达式 拓展资料 三、整合分析…

10s 内得到一个干净、开箱即用的 Linux 系统

安装 使用官方脚本安装我的服务器不行 官方脚本 mkdir instantbox && cd $_ bash <(curl -sSL https://raw.githubusercontent.com/instantbox/instantbox/master/init.sh) 下面是我的完整安装过程 mkdir /opt/instantbox cd /opt/instantbox 1.脚本文件 (这个没…

[PHP]严格类型

PHP: 类型声明 - Manual

【学网攻】 第(15)节 -- 标准ACL访问控制列表

系列文章目录 目录 系列文章目录 文章目录 前言 一、ACL(访问控制列表)是什么? 二、实验 1.引入 实验拓扑图 实验配置 测试PC2能否Ping通PC3 配置ACL访问控制 实验验证 PC1 Ping PC3 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认…

Spring Boot导出EXCEL 文件

主要功能:实现java导出excel到本地 JDK版本&#xff1a;openJDK 20.0.1 依赖pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchem…

Java 面试题之 IO(一)

字节流 文章目录 字节流InputStream&#xff08;字节输入流&#xff09;OutputStream&#xff08;字节输出流&#xff09; 文章来自Java Guide 用于学习如有侵权&#xff0c;立即删除 InputStream&#xff08;字节输入流&#xff09; InputStream用于从源头&#xff08;通常是…

Centos Cron设置定时任务

这本是很简单的问题&#xff0c;但是我服务器重装系统两次&#xff0c;遇到的问题都不一样&#xff0c;所以记录一下 1.首先要确保服务器上有 cron 服务 sudo systemctl status crond2.设置时区 sudo timedatectl set-timezone Asia/Shanghai3.重启crond 服务使crond服务的时…

Xds (eXtensible Discovery Service)理解

Xds &#xff08;eXtensible Discovery Service&#xff09;理解 概念介绍 XDS&#xff1a;全称是 eXtensible Discovery Service&#xff0c;中文译为”可扩展的服务发现“。是一个扩展性的协议&#xff0c;可以用于配置和控制 Envoy 代理的各个方面&#xff0c;包括路由规则…

Leetcode 206 反转链表

反转链表 准备工作1&#xff09;ListNode基本结构2&#xff09;初始化ListNode集合 解法一&#xff1a;遍历创建新节点解法二&#xff1a;两组List&#xff0c;面向对象操作解法三&#xff1a;递归调用解法四&#xff1a;直接移动解法五&#xff1a;解法二的面向过程 Leetcode …

Ubuntu 20.04 Server 使用命令行设置 IP 地址

1、编辑 /etc/netplan/ 目录下的配置文件00-installer-config.yaml (修改之前&#xff0c;把原来的文件备份) 按照对应的配置进行修改IP地址和网关 2、运行命令使其生效 sudo netplan apply 修改完成后&#xff0c;永久有效。重启后配置不会丢失

【智能家居入门之微信小程序控制下位机】(STM32、ONENET云平台、微信小程序、HTTP协议)

实现微信小程序控制单片机外设动作 一、使用ONENET可视化组件控制单片机外设动作二、使用微信小程序控制单片机外设动作三、总结 本篇博客话接上文&#xff1a; https://blog.csdn.net/m0_71523511/article/details/135892908 上一篇博客实现了微信小程序接收单片机上传的数据…

三、防御保护---防火墙安全策略篇

三、防御保护---防火墙安全策略篇 一、什么是安全策略二、安全策略的组成1.匹配条件2.动作3.策略标识 三、防火墙的状态检测和会话表1.会话表2.状态检测技术 四、ASPF--隐形通道五、用户认证1.用户认证的分类2.认证方式3.认证策略4.认证域 一、什么是安全策略 传统的包过滤防火…