[CentOS 7系列]grep/sed/awk实战

最近准备和CoreSite - Any2 California接入商建立网络BGP邻居关系。从peeringdb (https://www.peeringdb.com/ix/142)上找到了所有接入商的信息,但是转移信息到本地不是很方便,需要进行多次文本调整,耗时较长。作为萌新,立马就想到近期学习的grep/sed/awk工具。于是就尝试处理数据。

1、下载页面内容

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

将页面内容存入peering文件

2、删除无用信息

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

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                      ##检查

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

    <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、提取关键词信息

egrep ‘">.*</a>‘ peering > peer1     ##提取peer名称导入peer文件
文本样例:<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                                       ##检查行数是否正确

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

5、使用python脚本组合文件内容

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

▎利用python脚本提取并组合:

#/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 i in range(len(name)):
        print(peer[i]+‘ ‘+asn[i]+‘ ‘+ip[i]+‘ ‘+speed[i]+‘ ‘+policy[i])

▎处理结果样例:

如果想更周到点,可以将内容输入到一个文本文件里。因为部分peer名称带空格,可将分隔符改为其他特殊符号(如#,*),存入TXT文档内,在导入EXCEL时,也方便分隔。

通过以上步骤,可以采集到所需要的信息。如果不会python,最后一步可将5个文件内容黏贴到excel表格进行处理,也能达到同样的效果。

时间: 2024-10-12 21:25:01

[CentOS 7系列]grep/sed/awk实战的相关文章

[CentOS 7系列]grep/sed/awk高级扩展

在上一帖的实战中,我们用到了grep的"-Po"的用法.首先,我们来看看这几个参数的含义:       -P, --perl-regexp               Interpret  PATTERN as a Perl regular expression.  This is highly               experimental and grep -P may warn of unimplemented features.              -o, --on

LINUX 下 find grep sed awk 的常见基本用法特点

LINUX 下 find grep sed awk 的常见基本用法特点 只为让自己具有更高的水准,这就开始了长达6个月的小白进阶路! 这几天学习linux基础命令有点犯蒙,尤其是对文件查找这块.所有我想把一些我觉得常用的实用的参数项总结下来,大神勿喷哈... 不到之处请大家指教,小女子在此谢过了. 一.find:命令用于查找文件系统中指定的文件,其命令格式为: 1.find pathname -options [ -print  -exec  -ok ... ] (1)find 命令的参数: p

grep,sed,awk与简单正则表达式应用

grep,sed,awk与简单正则表达式应用 这里使用的测试文件是linux /etc/passwd文件,最好是复制一份进行练习,方式对文件内容造成损坏.感觉还是要多练习才能很好的使用,习题这里就不贴了,网上一找一大把. grep:   -o 用作计算出现多少次字段  -c 打印符合要求的行数  -n 在输出符合要求的行的同时也打印行号  -v 打印不符合要求的行  -A 后跟一个数字 ps -A2表示打印符合要求的行及下面两行  -B 后跟一个数字 ps -B2表示打印符合要求的行及上面两行 

Linux三剑客grep/sed/awk

grep/sed/awk被称为linux的“三剑客” grep更适合单纯的查找或匹配文本: sed更适合编辑匹配到的文本: awk更适合格式化文本,对文本进行较复杂各式处理: Grep --color=auto 或者 --color:表示对匹配到的文本着色显示 -i:在搜索的时候忽略大小写 -n:显示结果所在行号 -c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数 -o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行 -v:输出不带关键字的行(反向查询,反

十七. 正则以及grep ,sed,awk的简单应用

一.正则表达式:/ / grep,sed,awk 都能解释正则表达式 正则表达式:把一些特殊符号组合到一起描述字符和字符串的方法.^ 以什么开头 grep '^root' /etc/passwd$ 以什么结尾 如能登入系统的所有用 grep 'bash$'/etc/passwd. 任意一个字符 grep '^b.n' /etc/passwd 过滤取到bin的.* 所有字符* 代表前面的字符有0个或者无穷个 grep 'b*' /+ 必须用egrep 或 egrep -E 'ab+'表示前面的字符

Using of grep sed awk on Linux

#This script is to parse data file: fun0() { ## [INFO1]a=1   b=2 c=3 [INFO2]a=7 b=8 c=9 [INFO3] a=x b=y c=z } #! /bin/bash read Info Abc#echo $Info if [ "$Info" != "INFO1" -a "$Info" != "INFO2" -a "$Info"

linux grep sed awk

$ grep 'test' d* 显示所有以d开头的文件中包含 test的行. $ grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test的行. $ grep '[a-z]\{5\}' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行. $ grep 'w\(es\)t.*\1′ aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行.如果用egrep或grep

find/pg/grep/sed/awk命令

find pathname -options [-print -exec -ok ...] -print: find命令将匹配的文件输出到标准输出. 当前目录下查找文件权限位为 7 5 5的文件 $ find . -perm 755 -print 当前目录及子目录中查找文件名以一个大写字母开头的文件 $ find . -name "[A-Z]*" 希望在系统根目录下查找更改时间在 5日以内的文件 $ find / -mtime -5 -print 为了在/var/adm目录下查找更改时

linux初学之grep &nbsp; sed &nbsp; awk 正则表达基本例子

. 表示任意一个 (数字,#,空格,特殊符号,字母) *表示0个或多个*号前面的字符 +表示一个或多个+前面的字符 ?表示一个或零个前面的字符 .*表示任意一个任意字符(贪婪的匹配方法) ?,+,(),|,{},[]需要脱意 参数: -c  一用有多少行 -An n为数字,这一行以及下面(After)n行打印出来 -Bn n为数字,这一行以及上面n(Bfore)行打印出来 -Cn n为数字,上下n行打印出来 [[email protected] ~]#grep -n 'root' 1.txt 打