从文件中挑选出某些行

时间:2015-06-04 14:05:40

标签: list testing tcl

我正在编写一个从文件中读取的tcl脚本,并显示该文件中的某些行。我可以从文件n读取问题,但我不知道如何筛选出某些行,然后过滤掉我不需要的东西。我正在将文件读取到列表中,然后使用以下代码将其过滤掉;

proc listFromFile {/.../.../.../file_test.file} {
set f [open /.../.../.../file_test.file r]
set data [split [string trim [read $f]]]
close $f
return $data
}
set f [listFromFile /.../.../.../file_test.file]
set f [lsort -unique $f]
set f [lsearch -all -inline $f "test_*"

文件中的行看起来像

$(eval $(call CreateUvmTest, other, test_runtest1 ...
$(eval $(call CreateUvmTest, KEYWORD, test_runtest2 ...
$(eval $(call CreateUvmTest, KEYWORD, test_runtest3 ...
$(eval $(call CreateUvmTest, other, test_runtest4 ...

在我过滤掉其他不需要的东西之前,我如何挑选出包含KEYWORD的整行?包含KEYWORD的行与文件一起随机进行其他测试。这有可能吗?

2 个答案:

答案 0 :(得分:0)

它不应该变硬。首先,您可能希望在换行符处拆分文件的内容:

set data [split [string trim [read $f]] \n]

当您完成此操作后,您可以使用多种技巧来选择所需的行,例如

lsearch -all -inline $data *KEYWORD*

文档:lsearchreadsetsplitstring

答案 1 :(得分:0)

我强烈考虑

set lines [split [exec grep -Fw KEYWORD file_test.file] \n]

否则

proc select_lines {filename keyword} {
    set fid [open $filename r]
    while {[gets $fid line] != -1} {
        if {[string match "*$keyword*" $line]} {lappend lines $line}
    }
    close $fid
    return $lines
}
set lines [select_lines file_test.file KEYWORD]