我正在编写一个从文件中读取的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的行与文件一起随机进行其他测试。这有可能吗?
答案 0 :(得分:0)
它不应该变硬。首先,您可能希望在换行符处拆分文件的内容:
set data [split [string trim [read $f]] \n]
当您完成此操作后,您可以使用多种技巧来选择所需的行,例如
lsearch -all -inline $data *KEYWORD*
答案 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]