批量抓取cisco设备配置脚本编写(expect/sed/awk/shell)
应同事需求自行编写了第一个脚本,中间遇到一些坑。
需求,要求抓取设备“show ip interface brief”信息和“show interface des”描述信息。并且要求VLAN与描述信息在一个文件中显示出来。其实抓取工作很简单,难点在于字符处理中遇到时很多坑,比如关键字"More“抓取之后会有类似于“^[[7m--More--^[[m^M”的多余字符,是因为系统版本原因产生的。要用sed将其处理为awk可以匹配的格式。
先上内容。
1,抓取“show ip interface brief”信息(show inter des命令直接替换)。
#!/usr/bin/expect
#set ip
set ipaddress [lindex $argv 0]
#set user
set name [lindex $argv 1]
#set passwd
set passwd [lindex $argv 2]
#set timeout
set timeout 2
#ssh process
spawn ssh $name@$ipaddress
#进行判断
expect {
"yes/no" { send "yes\r" }
"*assword:" { send "$passwd\r";exp_continue}
"*# " { send "show ip inter bri\r" }
while (1) {
expect {
"More--" { send " " }
"*#" { break }
}
}
expect eof
2,字符处理脚本
用户名密码文件的格式为:
ip1 user1 passwd1
ip2 user2 passwd2
脚本如下:
#!/bin/bash
p=`pwd`
for i in `awk '{print $1}' $p/passwd` #取文件中第一列IP
do
j=`grep $i $p/passwd | awk '{print $2}'`
k=`grep $i $p/passwd | awk '{print $3}'` #j,k分别为取到的用户名,密码
echo "正在抓取"$i"的信息"
expect $p/ssh-brief.exp $i $j $k | grep Vlan > $p/brief/$i-bri.log #将ip,j,k作为参数传给expect登录并取配置存入文件中
if [ $? -eq 0 ];then
echo $i"地址文件抓取成功,下一步抓取描述文件。"
else
echo $i"地址文件抓取失败,即将退出脚本"
exit
fi
expect $p/ssh-des.exp $i $j $k | grep Vlan > $p/des/$i-des.log
if [ $? -eq 0 ];then
echo $i"描述文件抓取成功成功"
else
echo $i"描述文件抓取失败,即将退出脚本"
exit
fi
echo "处理"$i"的地址文件"
sed -i 's/^.*Vlan/Vlan/g' $p/brief/$i-bri.log #由于系统不同的原因产生了^[[7m--More--^[[m^M等多余字符这里对多余的字符进行处理。
if [ $? -eq 0 ];then
echo $i"地址文件处理成功"
else
echo $i"地址文件处理失败,即将退出脚本"
exit
fi
echo "处理"$i"的描述文件"
sed -i 's/^.*Vlan/Vlan/g' $p/des/$i-des.log
if [ $? -eq 0 ];then
echo $i"描述文件处理成功"
else
echo $i"描述文件处理失败,即将退出脚本"
exit
fi
echo "生成"$i"文件"
awk '{if(NR==FNR){i++;a1[i]=$1;a2[i]=$2;a3[i]=$3}else{j++;b1[j]=$1;b2[j]=$2" "$3" "$4}}END{for(m=0;m<=i;m++)for(n=0;n<=j;n++){if(a1[m]==b1[n]){print a1[m],a2[m],a3[m],b2[n]}}}' $p/brief/$i-bri.log $p/des/$i-des.log > $p/log/$i.log #处理两个文件件合并为一个文件,以Vlan为标识对两个文件相同Vlan匹配后生成新文件
if [ $? -eq 0 ];then
sed -i "s/$(echo -e '\015')//g" $/log/$i.log #去除新生成文件中的^M字符。
if [ $? -eq 0 ];then
echo $i"---------------------------------------------------------------------成功"
else
echo "生成"$i"文件失败,即将退出。"
exit
fi
done
批量抓取cisco设备配置脚本编写(expect/sed/awk/shell)的更多相关文章
- Python3利用BeautifulSoup4批量抓取站点图片的代码
边学边写代码,记录下来.这段代码用于批量抓取主站下所有子网页中符合特定尺寸要求的的图片文件,支持中断. 原理很简单:使用BeautifulSoup4分析网页,获取网页<a/>和<im ...
- 使用HtmlAgilityPack批量抓取网页数据
原文:使用HtmlAgilityPack批量抓取网页数据 相关软件点击下载登录的处理.因为有些网页数据需要登陆后才能提取.这里要使用ieHTTPHeaders来提取登录时的提交信息.抓取网页 Htm ...
- Web自动化框架LazyUI使用手册(4)--控件抓取工具Elements Extractor详解(批量抓取)
概述 前面的一篇博文详细介绍了单个控件抓取的设计思路&逻辑以及使用方法,本文将详述批量控件抓取功能. 批量抓取:打开一个web页面,遍历页面上所有能被抓取的元素,获得每个元素的iframe.和 ...
- 如何上传Packages到PyPI并批量抓取
1.如何上传包到PyPI ? 更新中... 2.批量抓取simple网站第三方模块 https://pypi.python.org/simple/ 3. 第三方模块的安装和使用 python set ...
- python实现列表页数据的批量抓取练手练手的
python实现列表页数据的批量抓取,练手的,下回带分页的 #!/usr/bin/env python # coding=utf-8 import requests from bs4 import B ...
- Hibernate批量抓取
------------------siwuxie095 Hibernate 批量抓取 以客户和联系人为例(一对多) 1.批量抓取 同时查询多个对象的关联对象,是 Hibernate 抓取策略的一种 ...
- Hibernate学习---第十一节:Hibernate之数据抓取策略&批量抓取
1.hibernate 也可以通过标准的 SQL 进行查询 (1).将SQL查询写在 java 代码中 /** * 查询所有 */ @Test public void testQuery(){ // ...
- Hibernate的批量抓取
批量抓取理解:如果我们需要查找到客户的所有联系人的话,按照正常的思路,一般是首先查询所有的客户,得到返回的客户的List集合.然后遍历List集合,得到集合中的每一个客户,在取出客户中的联系人(客户表 ...
- day36 08-Hibernate抓取策略:批量抓取
package cn.itcast.test; import java.util.List; import org.hibernate.Hibernate; import org.hibernate. ...
随机推荐
- echarts教程-asp.net+ashx实现堆积柱状
说说看.崔西莲夫人紧接着说. 想不到史春吉是这种人. 你会这样说倒是有趣,因为这正是我当时的感觉.这跟奈维尔的个性不合.奈维尔,就像大部分男人一样,通常都是尽量避开任何可能造成尴尬或不愉快的场面.我怀 ...
- Windows搭建golang开发平台
Golang是谷歌开发的一款开源性语言,暂时比较方便的IDE有Inteillj Idea.LiteIDE.Eclipse(Golipse)等,使用起来比较方便的IDE:LiteIDE和Inteillj ...
- 详解 $().css('width')和$().width()的区别
在本次项目开发中,经常用jquery获取高度和宽度并且动态加载,有时候用$().css('width')或$().width()这两个方法获取宽度并设置,但是有时候出现获取不到的情况,查阅资料后发现他 ...
- 根据文字计算出label的高度
ios7.0之前用: [strtestsizeWithFont:ContentFontconstrainedToSize:CGSizeMake(ScreenWeight -20, 1000) line ...
- .4-Vue源码之数据劫持(2)
开播了开播了! vue通过数据劫持来达到监听和操作DOM更新,上一节简述了数组变化是如何监听的,这一节先讲讲对象属性是如何劫持的. // Line-855 Observer.prototype.wal ...
- 紧跟腾讯大王卡:B站2233卡“基友号”即将上线
来自B站官方的消息显示,B站在近期也将推出"基友号"功能,功能的内容是通话免费,考虑到这类互联网套餐都是中国联通在运营,因此在内容上可能也会效仿腾讯大王卡实现免费通话. 目前,B站 ...
- Problem B: 大整数的加法运算
Problem B: 大整数的加法运算 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 112 Solved: 57[Submit][Status][W ...
- Javascript判断数据类型与真假值隐形转换研究
一.引言 我们在开发的时候经常要判断真和假,这是我们经常写的代码: if(a){ alert(1) } 那我们怎么判定a是真还是假呢?下面这些值的真假又是多少呢?它们的数据类型又是怎样的呢? &quo ...
- selenium 之 ActionChains (二)
今天,小编为大家介绍的是标题中的三个新方法,以及一个老方法 以下方法都需要操作一个名为Keys的包,先来简单认识下 ALT = u'\ue00a' CONTROL = u'\ue009' ENTER ...
- ContextLoaderListener - 运行原理
基本概念: servletContext:http://blog.csdn.net/yjw757174266/article/details/45072975 1. 使用ContextLoaderL ...