美文网首页
18-三剑客之sed后向引用的补充及awk

18-三剑客之sed后向引用的补充及awk

作者: 文娟_狼剩 | 来源:发表于2019-04-19 17:55 被阅读0次

    一、sed后向引用的巩固

    1、获取网卡ip的地址:ip a s eth0
    方法1----sed 正则

    [root@oldboyedu59 ~]# ip a s eth0 |sed -n '3p' |sed 's#^.*t ##g'
    10.0.0.201/24 brd 10.0.0.255 scope global eth0
    [root@oldboyedu59 ~]# ip a s eth0 |sed -n '3p' |sed 's#^.*t ##g'|sed 's#/.*$##g'
    10.0.0.201
    

    方法2----sed 后向引用

    [root@oldboyedu59 ~]# ip a s eth0 
    [root@oldboyedu59 ~]# ip a s eth0 |sed -n 3p 
        inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0
    [root@oldboyedu59 ~]# ip a s eth0 |sed -n 3p |sed -r 's#^.*t (.*)/.*$#\1#g'
    10.0.0.201
    [root@oldboyedu59 ~]# 
    [root@oldboyedu59 ~]# ip a s eth0 |sed -n 3p |sed -r 's#(^.*t )(.*)(/.*$)#\1#g'
        inet 
    [root@oldboyedu59 ~]# ip a s eth0 |sed -n 3p |sed -r 's#(^.*t )(.*)(/.*$)#\3#g'
    /24 brd 10.0.0.255 scope global eth0
    

    2、取stat /etc/hosts结果中的644

    [root@oldboyedu59 ~]# stat /etc/hosts | sed -n '4p'|sed -r 's#^.*\(0([0-9]+)/.*$#\1#g'
    644
    

    https://www.processon.com/view/link/5cb92f24e4b0bab9095ea765

    image.png

    二、awk(三剑客老大)※※※

    awk是三剑客的老大,擅长取列、取行、统计计算

    1、awk的格式

    awk '找谁{干啥}' 文件
    awk '条件{动作}' 文件 -----常用的动作就是print(显示)

    2、awk的执行过程

    https://www.processon.com/view/link/5becee35e4b0d74dc540e690

    image.png

    3、awk取行与取列

    取行:(record记录),在awk下可以根据你的描述找到这一行,如:awk 'NR==1' 文件;如果不知道要的是那一行,可以用//进行过滤,如:awk '/oldboy/' 文件;这里的NR表示Number of Record(记录号行号),记住一定要大写,Linux的等于就是==

    相关例子:

    取出指定行的内容 
    [root@oldboyedu59 /oldboy]# awk 'NR==1' lidao.txt
    101,oldgirl,CEO
    [root@oldboyedu59 /oldboy]# awk 'NR==2' lidao.txt
    101,hello,WC
    
    取出文件中包含old的文件
    [root@oldboyedu59 /oldboy]# awk '/old/' lidao.txt
    101,oldgirl,CEO
    [root@oldboyedu59 /oldboy]# 
    

    取列(filed 字段)
    -F:指定awk的分割符

    1>取出oldboy.txt中的所有第1列

    [root@oldboyedu59 /oldboy]# awk '{print $1}' oldboy.txt 
    my
    our
    my
    

    2>当要所显示几列时,可以通过","隔开进行显示,也可以在显示列之间添加特殊符号“@”

    [root@oldboyedu59 /oldboy]# awk '{print $1,$3,$5}' oldboy.txt 
    I oldgirl 
    I linux. 
    I badminton,ball ball
    [root@oldboyedu59 /oldboy]# awk '{print $1"@@"$3"@@"$5}' oldboy.txt 
    I@@oldgirl@@
    I@@linux.@@
    I@@badminton,ball@@ball
    

    3>显示oldboy.txt的第4行的第1列 第2列和第4列

    [root@oldboyedu59 /oldboy]# awk 'NR==4{print $1,$2,$4}' oldboy.txt 
    I like ball
    

    4>awk默认是以空格为分隔符,但有时候我们取出来的列中有我们不需要的内容,比如逗号,在逗号之后接其他的内容,这时候我们可以使用awk的参数-F(指定awk的分隔符),如:

    取出以下内容中的lidao和918391635
    echo 'I am lidao,my qq is 918391635'  >/oldboy/fs.txt 
    
    以下命令执行之后找显示除了多余的“,my”,这是因为awk默认是以空格为分隔符的
    [root@oldboyedu59 /oldboy]# awk '{print $3,$6}' fs.txt 
    lidao,my 918391635
    
    使用awk的参数-F指定以逗号或空格为分隔符,就可以,如下
    [root@oldboyedu59 /oldboy]# awk -F',| ' '{print $3,$7}' fs.txt 
    lidao 918391635
    [root@oldboyedu59 /oldboy]# awk -F'[, ]' '{print $3,$7}' fs.txt 
    lidao 918391635
    

    4、过滤

    在awk中什么可以作为条件?
    比较、正则、范围、特殊

    举例:
    1>找出/etc/passwd第3列中大于999的行

    [root@oldboyedu59 /oldboy]# awk -F':' '$3>999' /etc/passwd
    

    注:显示第3列用print,只说第3列如果是比大小,直接用$3即可

    2>#找出/etc/passwd第4列中大于0并且小于1000的行

    [root@oldboyedu59 /oldboy]# awk -F':' '$4>0&&$4<1000' /etc/passwd
    

    相关文章

      网友评论

          本文标题:18-三剑客之sed后向引用的补充及awk

          本文链接:https://www.haomeiwen.com/subject/xawqgqtx.html