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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM