2017-04-20 74 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 
相关问题