在多次出现的文件中搜索模式

时间:2017-04-20 00:33:33

标签: regex perl sed

我正在尝试在模式之间进行搜索。我知道如果只出现一次,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之间打印内容?

作为一种临时解决方法,我打印全部并且第一次出现。

2 个答案:

答案 0 :(得分:0)

如果你想使用perl,这个单线程可以完成这项任务:

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

输出:

data1
data2

答案 1 :(得分:0)

尝试触发器操作符

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