2017-04-20 61 views
0

我正在嘗試在模式之間進行搜索。我知道sed會做到這一點,如果它是一次發生。在多次出現的文件中搜索模式

以下是文件:

Iowa<br> 
data1<br> 
data2<br> 
Montana<br> 
junk1<br> 
junk2<br> 
junk3<br> 
Iowa<br> 
data3<br> 
data4<br> 
Arizona<br> 
junk5<br> 
junk6<br> 

我試圖讓IowaMontana之間的內容。

所以,我做sed -ne '/Iowa/,/Montana/p$file,看到這樣的結果:

Iowa<br> 
data1<br> 
data2<br> 
Montana<br> 
Iowa<br> 
data3<br> 
data4<br> 
Arizona<br> 
junk5<br> 
junk6<br> 

不知道爲什麼它打印Iowa - Arizona和超越。有沒有辦法僅在IowaMontana之間打印內容?

作爲臨時解決方法,我正在打印所有文件並執行第一次出現。

+1

最後awk答案(http://stackoverflow.com/a/38972737/4082052)適合...也建議添加您的預期輸出到kn如果你需要'愛荷華州'和'蒙大拿州'也輸出或只有他們之間的線......也清楚說明,如果你的輸入可以包含多個或只有一個'愛荷華州...蒙大拿州' – Sundeep

回答

0

如果你想用perl,這一個班輪這項工作:

perl -ne 'last if /Montana/; print if $i; $i++ if /Iowa/' $file

輸出:

data1 
data2 
0

嘗試觸發器操作

perl -ne 'next if (1 ../Iowa/); last if(/Montana/); print;' input.txt