zoukankan      html  css  js  c++  java
  • awk匹配某一段内容,打印第一段

    要求:

    awk 文本在文本中搜索abc
    搜到后再从搜到的那一行开始一直输出后面的行,
    直到某一行含有bcd就停止

    测试文本:

    [root@localhost]# cat awktest 
    
    sadfj
    sdjaflk
    cal
    
    sdafjlksdf
    jlksad
    jsadkl sadfjl
    abc 123
    sdjafk
    jslkd
    sjdkl
    jlskd
    bcd 321
    sadf
    sjdl
    sdjl
    sdj
    j
    

      

    这里使用awk时,要想到awk是行处理,所以执行语句都是每一行为一个周期

    • awk '/abc/{p=1} /bcd/{p=0} p' awktest 

    某行匹配到abc时,p为1,打印该行;但若遇到一行里有abc和bcd,p为0,不打印;这种有弊端

    • awk '/abc/{p=1} /bcd/{if(p){print;exit}}p' awktest

    遇到第一个/abc/,标记{p=1};遇到/bcd/,执行{print;exit}   这里表示先执行打印该行,然后退出;最后执行p(p=1为真,打印该行,p未赋值即为空,为假,不执行动作)

     

    [root@localhost home]# awk '/abc/{p=1} /bcd/{print;exit}p' awktest 
    abc 123
    sdjafk
    jslkd
    sjdkl
    jlskd
    bcd 321
    

      可以试一试在abc行同时加上bcd

    最后该命令还需要加判断,abc跟bcd的先后顺序,并不适合做多段abc-bcd的取值

  • 相关阅读:
    java 死锁
    阿里云 zookeeper
    spring 单元测试
    java hashmap分段锁实现
    java lambda 列表生成列表
    springAOP简介
    spring IOC小知识点
    spring中相互依赖的问题
    linux学习02-虚拟机安装CentOS之后联网
    linux学习01-虚拟机VirtualBox上安装centos7,小白第一步
  • 原文地址:https://www.cnblogs.com/irockcode/p/6928548.html
Copyright © 2011-2022 走看看