sed打印从匹配到其他匹配不包括在内

时间:2014-07-16 10:34:30

标签: regex sed

我想打印从匹配到第二场比赛的所有线路,不包括第二场比赛。

到目前为止,我所拥有的一切都做得太多,因为它也打印了第二场比赛。

具体来说,假设我要打印从包含'test'的行开始的所有内容,最多但不包括以数字开头的第一行或'''。

这在某种程度上,但不是所有方式:

sed -n '/test/,/^[0-9]\|^\[/p' file

3 个答案:

答案 0 :(得分:2)

通过awk

这样做要容易得多
awk '/test/{p=1} /^([0-9]|\[)/{p=0} p' file

答案 1 :(得分:0)

使用awk

awk 'p && /^[0-9]|^\[/ { exit }; /test/{ p = 1 } p' file

示例:

$ cat temp.txt
4
1
2
3
4
5
$ awk 'p && /4/ { exit }; /2|1/{ p = 1 } p' temp.txt
1
2
3

注意当找不到4时它如何跳过/2|1/

答案 2 :(得分:0)

sed -n '/test/,/^[0-9[]/ {
   /test/ {
      h;b
      }
   x;p
   $ {
     x
     /^[^0-9[]/ p
     }
   }' YourFile

应该有效但不优雅