grep/sed/awk实战

简介:

  最近准备和CoreSite - Any2 California接入商建立网络BGP邻居关系。从peeringdb上找到了所有接入商的信息,但是转移信息到本地不是很方便,需要进行多次文本调整,耗时较长。

wKiom1l-g-uR62S8AAB6YBGkRww311.png-wh_50


    作为萌新,立马就想到近期学习的grep/sed/awk工具。于是就尝试处理数据。


1、下载页面内容

1
> curl https: //www .peeringdb.com /ix/142  > peering

将页面内容存入peering文件


2、删除无用信息

翻看网页,发现第一个行需要的信息是“2degrees”,最后一行是“Zscaler AS22616”

1
2
3
4
5
6
grep  -n  '2degrees'  peering     ##发现第一行是807
sed  -i  '1,806' d peering          ##删除1-806行
head  peering                       ##检查
grep  -nA8  '22616'  peering     ##发现最后一行是5161
sed  -i  '5162,$' d peering         ##删除5161后的行
tail  peering                       ##检查

▼还有一种方法:

1
2
3
4
egrep  'view_title right'  peering
   <div class= "view_title right"  data-edit-toggled= "edit"   style= "display:none;" >
sed  -i  '1,/2degrees/' d peering
sed  -i  '/view_title right/,$' d peering

这种方式基本能删除不需要的信息。


3、观察剩余内容,提取关键词

▼样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
     < div  class = "row item" >
       < div  class = "col-xs-5 col-sm-5 col-md-5" >
         < div  class = "peer"  data-sort-value = "4 less communications, inc."  data-filter-value = "4 Less Communications, Inc." >
           < a  href = "/net/5985" >4 Less Communications, Inc.</ a >
         </ div >
         < div  class = "asn"  data-sort-value = "16912"  data-filter-value = "16912" >16912</ div >
       </ div >
       < div  class = "col-xs-4 col-sm-4 col-md-4" >
         < div  class = "ip4"  data-filter-value = "206.72.210.229" >206.72.210.229</ div >
         < div  class = "ip6"  data-filter-value = "None" >None</ div >
       </ div >
       < div  class = "col-xs-3 col-sm-3 col-md-3" >
         < div  class = "speed"  data-sort-value = "1000"  data-filter-value = "1G" >1G</ div >
         < div  class = "policy"  data-filter-value = "Open" >Open</ div >
       </ div >
     </ div >

关键词分别为“peer”,“asn”,“ip4”,“speed”和“policy“”,这些也是我想要提取的信息。


4、提取关键词信息

1
2
3
4
5
6
egrep  '">.*</a>'  peering > peer1        ##提取peer名称导入peer1文件
文本样例:<a href= "/net/5985" >4 Less Communications, Inc.< /a >
wc  -l peer1                                      ##查看行数,用于确认
sed  -ir  's#</a>##g'  peer1                ##删除最后的 "</a>"
awk  -F  '>'  '{print $2}'  peer1 >peer     ##提取peer名称
wc  -l peer                                        ##检查行数是否正确

▼还有一种方法:

1
2
cat  peering |  grep  -Po  '(?<=>).*(?=</a>)' > peer      ##"-P"表示采用Perl正则表达式模式
                                         ##如果只需要匹配到的部分,还可以加上-o选项

用同样的方法提取asn,ip4,speed和policy信息。


5、组合文件内容

通过以上步骤,我得到了5个文本文件,分别装有我需要的信息,且经过行数对比,行数一致。

方法1——利用paste命令组合文件:

1
2
3
4
5
6
7
8
9
10
11
[root@server01 test1] # paste -d '*' name asn ip speed policy
2degrees*23655*206.72.211.83*10G*Selective
4 Less Communications, Inc.*16912*206.72.210.229*1G*Open
AARNet*7575*206.72.210.64*10G*Selective
Ace Data Centers, Inc.*11798*206.72.210.128*10G*Open
ACSData*18119*206.72.211.12*1G*Open
Aerioconnect, Inc.*10993*206.72.210.21*10G*Selective
......
Zoom Video Communications, Inc.*30103*206.72.211.79*10G*Selective
Zscaler AS22616*22616*206.72.211.39*10G*Open
Zscaler AS22616*22616*206.72.211.40*10G*Open


方法2——也可以利用python脚本提取并组合:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#/usr/bin/env python
def  newlist(arg):
     file = open (arg, 'r' )
     arglist = []
     for  eachline  in  file :
         eachline = eachline.replace( "\n" ,"")
         arglist.append(eachline)
     return  arglist
     file .close()
 
if  __name__ = = '__main__' :
     peer = newlist( 'peer' )
     asn = newlist( 'asn' )
     ip = newlist( 'ip' )
     speed = newlist( 'speed' )
     policy = newlist( 'policy' )
 
     for  in  range ( len (name)):
         print (peer[i] + '*' + asn[i] + '*' + ip[i] + '*' + speed[i] + '*' + policy[i])

▼处理结果:

1
2
3
4
5
6
7
8
9
10
11
[root@server01 test1] # python3 python.py
2degrees*23655*206.72.211.83*10G*Selective
4 Less Communications, Inc.*16912*206.72.210.229*1G*Open
AARNet*7575*206.72.210.64*10G*Selective
Ace Data Centers, Inc.*11798*206.72.210.128*10G*Open
ACSData*18119*206.72.211.12*1G*Open
Aerioconnect, Inc.*10993*206.72.210.21*10G*Selective
......
Zoom Video Communications, Inc.*30103*206.72.211.79*10G*Selective
Zscaler AS22616*22616*206.72.211.39*10G*Open
Zscaler AS22616*22616*206.72.211.40*10G*Open

因为部分peer名称带空格,故将分隔符改为其他特殊符号(如#,*),存入TXT文档内,在导入EXCEL时,也方便分隔。


通过以上步骤,可以采集到所需要的信息。

如果是熟悉python,那么可以将所有操作放在脚本里(详见:利用python处理网页信息),最后使用openpyxl模块导入EXCEL文件里。









本文转自Grodd51CTO博客,原文链接:http://blog.51cto.com/juispan/1945059,如需转载请自行联系原作者


相关文章
|
存储 消息中间件 监控
阿里云sls日志服务简介和使用流程
阿里云SLS(Simple Log Service)是一种高度可扩展的、低成本的日志托管服务,它提供了全面的日志采集、存储、分析和呈现功能。阿里云SLS是全球首个在公共云上提供日志服务的企业,它具有高可靠性、高稳定性和高安全性等特点,可满足不同企业的日志需求。
|
存储 数据采集 安全
【PHP+VUE】手术麻醉临床信息管理系统源码
【PHP+VUE】手术麻醉临床信息管理系统源码
397 0
|
9月前
|
存储 安全 API
如何下载旧版本的 Postman?
旧版本的 Postman 可能有助于更好地兼容不同的框架。 了解如何找到 Postman 的确切版本,以便优化你的 API 开发!
如何下载旧版本的 Postman?
|
开发工具 Android开发 git
鸿蒙Flutter实战:01-搭建开发环境
本文介绍了如何搭建鸿蒙 Flutter 开发环境,包括安装 DevEco Studio 等工具,并详细说明了 Mac 和 Windows 系统下的环境变量配置。此外,还介绍了如何使用 FVM 管理多个 Flutter 版本,并提供了一些常见问题的解决方案和交流群信息。
571 0
鸿蒙Flutter实战:01-搭建开发环境
|
监控 数据可视化 测试技术
性能测试:性能测试报告
**性能测试报告摘要** 报告详述系统在不同负载下的性能,作为决策、问题发现与解决、沟通合作及监控改进的依据。内容涵盖测试目的、环境、策略、用例、结果、分析、问题、调优建议及风险评估。清晰的图表辅助理解,为开发团队提供优化指导,确保系统性能与用户体验的提升。
|
敏捷开发 项目管理
深入理解Scrum:敏捷开发的核心原则和方法
Scrum强调迭代、协作、自组织和透明度,使团队能够更好地应对不断变化的需求和复杂性。Scrum方法的核心思想是通过一系列短期周期来交付功能,每个周期通常称为Sprint,以便及早获取用户反馈、适应变化并提供高质量的产品。
|
机器学习/深度学习 人工智能 算法
使用LabVIEW AI视觉工具包快速实现SIFT特征检测(含源码)
使用LabVIEW AI视觉工具包快速实现SIFT特征检测(含源码)
726 0
|
监控 算法 Java
进程调度的原理和算法探析
本文探讨了进程调度的原理和算法,并提供了全面的概述。进程调度是操作系统中的重要组成部分,用于决定进程的执行顺序和分配CPU时间。我们讨论了优先级调度和时间片轮转调度算法。优先级调度根据进程的优先级确定执行顺序,可以分为抢占式和非抢占式。时间片轮转调度将CPU时间划分为固定大小的时间片,每个进程在一个时间片内执行。合理设置时间片长度能够避免资源浪费和频繁的上下文切换。最短作业优先和最短剩余时间优先是常见的调度算法,通过预估和动态计算进程的执行时间提高系统效率和响应速度。多级反馈队列调度综合了优先级调度和时间片轮转调度的优点,适应不同类型的进程和任务。通过本文的阐述,读者将对进程调度的原理和算法有
750 0
进程调度的原理和算法探析
|
存储 弹性计算 编解码
技术分享 | 云原生算力时代-倚天实例技术架构与最佳实践解析
阿里云倚天实例基于平头哥半导体自研倚天710云原生处理器,倚天710使用ARMv9架构,采用业界领先的工艺设计,单芯片容纳高达600亿晶体管,内含128核CPU核心,主频2.75GHz,能同时兼顾性能和功耗。同时得益于阿里云自研的CIPU处理器以及飞天云计算操作系统,倚天实例实现了芯片、计算架构及操作系统的协同优化,显著提升了算力性价比。目前阿里云倚天实例已经在视频编解码、科学计算、电商等领域得到了广泛的应用。