expect正则表达式详解与SSH实例应用
本文档主要介绍了expect脚本中的正则表达式应用,expect是一种用于自动化命令行交互的工具,其在处理字符串匹配、数据提取等方面表现出色。文中提到的正则表达式语法主要包括glob模式(-gl)和expect特定模式(-re),后者更为强大。 首先,glob模式(-gl)用于基本的通配符匹配,例如`expect-gl"abc"`可以匹配以"abc"开头的字符串。而expect特定模式(-re)是更高级的正则表达式,如`expect-re"abc"`,能够执行复杂的匹配规则,如匹配以数字字符紧跟一个或多个空格的模式。 正则表达式的元字符有特定含义: - `^` 表示字符串的开始; - `$` 表示字符串的结束; - `[a-z]` 匹配小写字母; - `[0-9]` 匹配数字; - `[^a-z]` 匹配除了小写字母以外的字符; - `.` 表示匹配任何单个字符; - `*` 表示前面的字符可重复0次或多次; - `+` 表示前面的字符至少重复1次; - `?` 表示前面的字符重复0次或1次; - `.*` 表示任意数量的任意字符直到字符串结束。 在实际的expect脚本中,如例子所示,`expect_out(buffer)`是一个重要的输出变量,用于存储命令执行结果。例如,在第6步中,`expect-re"\n(\[0-9]+\)"`用于匹配以换行符后跟一个或多个数字的模式,然后将匹配到的结果存入`expect_out(buffer)`。通过`expect_out(0,string)`和`expect_out(1,string)`,开发者可以分别获取完整的匹配字符串和子匹配结果,如第一个括号内的数字。 在脚本中,需要注意转义特殊字符和数组定义,如`\n`表示换行符,`\[]`用于定义字符集,`\()`用于捕获组。此外,如果期望输出包含特殊字符,需要确保在字符串中正确处理这些转义。 在测试部分,通过发送命令`ll|wc-l\r`并观察`expect_out(buffer)`的输出,可以验证正则表达式匹配的有效性。脚本会根据预期输出检查命令执行是否符合预期,例如检查是否正确地得到了数字字符的数量。 expect正则表达式的使用可以帮助简化命令行交互的自动化过程,提高脚本的灵活性和准确性。理解和掌握这些正则表达式语法和用法,对于编写高效且稳定的expect脚本至关重要。
默认模式的-gl。
1.expect "abc"
2.expect -gl "abc"
3.expect -re "abc"
上面3个式子,1和2是一样的。
然后说说-re模式一些具体内容
^表示字符串开始
$表示字符串结束
[a-z]表示a-z中任意一个字母
[0-9]表示任意一个数字
[^a-z]表示不是a-z中任意一个字母
.表示任意字符
*表示重复前面的字符0次或多次
+表示重复前面的字符1次或多次
?表示重复前面的字符0次或1次
.*表示任意数量的字符
有些字符对tcl和expect的正则表达式来说都是特殊字符,这时你需要在它前面加上\
比如[],在正则表达式中使用时需要这样\[],只在左括号前加\就行了
要匹配的内容从哪来呢?在expect_out(buffer)里。
expect 把自动交互产生的控制台输出都放在expect_out(buffer)里面了,具体需要什么数据要自己用正则表达式去匹配出来。
而表达式匹配的值会放在expect_out(0,string)里面。
来个例子吧。
1.#!/usr/bin/expect
2.set timeout 30
下载后可阅读完整内容,剩余2页未读,立即下载
- 粉丝: 3
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦