【发布时间】:2021-11-03 00:31:38
【问题描述】:
我正在编写一个 TCL 脚本来读取多个文件并使用正则表达式在它们中搜索包含特定单词的行。我已经能够从文件中搜索一件事。但是我需要修改脚本以在脚本中搜索多个内容,将在一个文件中找到的项目一起打印在一行中,然后在第二行中从另一个文件中找到的项目。 我写了这个
foreach fileName [glob /home/kartik/tclprac/*/*] {
# puts " Directories present are: [file tail $fileName]"
set fp [open $fileName "r"]
while { [gets $fp data]>=0 } {
if {[regexp {set Date*} $data] | [regexp {set Channel* } $data] } {
#puts "file: [file dirname $fileName] data: $data"
set information "file: [file dirname $fileName] data: $data"
puts $information
set fp2 [open output.txt "a"]
puts $fp2 $information
}
}
}
现在我得到的输出为:
file: /home/kartik/tclprac/wire_3 data: set Date 02/08/2021
file: /home/kartik/tclprac/wire_2 data: set Date 01/08/2021
file: /home/kartik/tclprac/wire_1 data: set Channel Disney
file: /home/kartik/tclprac/wire_1 data: set Date 31/07/2021
我想要的是类似的东西
file: /home/kartik/tclprac/wire_3 data: set Date 02/08/2021
file: /home/kartik/tclprac/wire_2 data: set Date 01/08/2021
file: /home/kartik/tclprac/wire_1 data: set Date 31/07/2021 set Channel Disney
【问题讨论】:
-
请注意,
|是数学上的“或”。使用||表示布尔“或”。 -
关键是不要立即打印信息:建立一个匹配行的列表,然后在阅读完文件后打印出加入的列表。
-
另外,关闭你打开的文件句柄,否则你可能会用完它们。
-
另外,你只需要在foreach循环开始之前打开一次output.txt
标签: regex file-io scripting tcl