2013-06-26 14 views
3

我試圖打印任何存在於這兩個不同圖案之間的文本也與此模式。但只有當包含特定字符串的模式之間的文本[使用awk,flag ...]。打印包含特定字符串的兩個圖案之間的所有線條

我的輸入文件:

START 12.5 elephant dasnbjdai adfad 
     s = ad cat da 524a das 
     da 54e dog dada 455ad7 
     da 45d cow 554s7e 
END 
START fjs 4 rhino das 452 da 
     da = cat da gd 
     das_d pig das 
     4524s dda monkey dasdc4 
END 
START da dfsdg cow 
     bear dac45 
     lion bla bla 
     5as4 fox bla fa jsa 
END 
START dandsk cow dada 
     bla sheep bla 
     fsgv turtle fsd 
     da dragon da 
END 
START 
     daadas pig fsv45 
     dasd walrus das 52 
END 

和我的輸出應爲[只顯示START ... END之間的直線,但包含貓]

START 12.5 elephant dasnbjdai adfad 
     s = ad **cat** da 524a das 
     da 54e dog dada 455ad7 
     da 45d cow 554s7e 
END 
START fjs 4 rhino das 452 da 
     da = **cat** da gd 
     das_d pig das 
     4524s dda monkey dasdc4 
END 

如何打印即所有線路containig龍和海象;

輸出

START dandsk cow dada 
     bla sheep bla 
     fsgv turtle fsd 
     da dragon da 
END 
START 
     daadas pig fsv45 
     dasd walrus das 52 
END 
+3

你做任何努力去寫呢? – anubhava

回答

2

一種方式與awk

awk -v RS="END" '$0~/cat/{print $0 RS}' input 

對於第二種情況:

awk -v RS="END" '$0~/walrus|dragon/{print $0 RS}' input 

如果你不想在那麼之間的空行:

awk 'BEGIN{RS="END";ORS=""}$0~/dragon|walrus/{print $0 RS}END{print "\n"}' input 
0

隨着GNU AWK(設置RS到多於一個字符):

$ gawk 'BEGIN{RS=ORS="\nEND\n"} /dragon|walrus/' file 
START dandsk cow dada 
     bla sheep bla 
     fsgv turtle fsd 
     da dragon da 
END 
START 
     daadas pig fsv45 
     dasd walrus das 52 
END 

或:

$ awk -v re="dragon|walrus" 'BEGIN{RS=ORS="\nEND\n"} $0~re' file 
START dandsk cow dada 
     bla sheep bla 
     fsgv turtle fsd 
     da dragon da 
END 
START 
     daadas pig fsv45 
     dasd walrus das 52 
END 
相關問題