如何在TCL中匹配某个模式后获得接下来的5行 我有大约30行的输出,只需要几行......
答案 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包,if,incr,package,puts,Syntax of Tcl regular expressions,regexp,{{ 3}}