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的取值
"世界上只有一种真正的英雄主义,就是认清了生活的真相后,还依然执着地热爱它。"
——罗曼·罗兰