要求:
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的取值