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的取值

  • 相关阅读:
    阅读笔记06
    阅读笔记05
    学习进度03
    四则运算03
    阅读笔记04
    求最大子数组值(有环版)
    合作项目02
    新的小组信息以及项目名称与介绍
    第六周进度条
    软件工程个人作业4(课堂练习&&课堂作业)
  • 原文地址:https://www.cnblogs.com/irockcode/p/6928548.html
Copyright © 2011-2022 走看看