在tcl中匹配regexp之后获得接下来的5行

时间:2016-06-02 20:36:59

标签: regex tcl

如何在TCL中匹配某个模式后获得接下来的5行 我有大约30行的输出,只需要几行......

3 个答案:

答案 0 :(得分:1)

可能更容易将输出拆分为行列表,以便您可以使用lsearch

% set output [exec seq 10]
1
2
3
4
5
6
7
8
9
10
% set lines [split $output \n]
1 2 3 4 5 6 7 8 9 10
% set idx [lsearch -regexp $lines {4}]
3
% set wanted [lrange $lines $idx+1 $idx+5]
5 6 7 8 9

答案 1 :(得分:0)

只需在正则表达式上附加内容即可!像这样:

([^\n]*\n){5}

答案 2 :(得分:0)

Glenn Jackman的解决方案可能更好,但fileutil中的行处理命令可能更适合某些变体。

package require fileutil

给定一个如下所示的文件:

% cat file.txt
1
2
3
4
5
6
7
8
9
10

现在,对于文件中的每一行

set n 0
set re 4
set nlines 5
::fileutil::foreachLine line file.txt {
    if {$n > 0} {
        puts $line
        incr n -1
    }
    if {$n == 0 && [regexp $re $line]} {
        set n $nlines
    }
}

如果计数器n大于0,则打印该行并递减。如果n等于0且正则表达式与该行匹配,请将n设置为$nlines(5)。

# output:
5
6
7
8
9

文档:fileutil包,ifincrpackageputsSyntax of Tcl regular expressionsregexp,{{ 3}}