我想打印从匹配到第二场比赛的所有线路,不包括第二场比赛。
到目前为止,我所拥有的一切都做得太多,因为它也打印了第二场比赛。
具体来说,假设我要打印从包含'test'的行开始的所有内容,最多但不包括以数字开头的第一行或'''。
这在某种程度上,但不是所有方式:
sed -n '/test/,/^[0-9]\|^\[/p' file
答案 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
应该有效但不优雅