使用 Tcl,您将编写比其他语言更长的程序:
# Open the files for streaming...
set filename "whatever.log"
set fin [open $filename]
set fout [file tempfile tempName]
# Process the lines, one by one...
while {[gets $fin line] >= 0} { ### <<< THIS IS IDIOMATIC FOR STREAMING
if {[string first "-s 0 -d 29 -p cbr" $line]} {
regsub "^h" $line "d" line
}
puts $fout $line
}
# Finalize everything
close $fin
close $fout
file rename $tempName $filename
如果您希望输出转到不同的文件,您可以使用:
set fout [open "differentFile.txt" "w"]
而不是set fout [file tempfile tempName]
并省略file rename
. (这也将使代码在 8.6 之前的所有 Tcl 版本上工作;file tempfile
这是一个新功能,但这里使用的所有其他内容已经存在了很长时间。)
或者,对于一次读取所有行的版本,用这个使用行模式 RE 替换和一点点智能的单行替换中央处理循环:
# Use [puts -nonewline] because the last newline is kept with [read]
puts -nonewline $fout [regsub -all -line "^h(.*-s 0 -d 29 -p cbr)" [read $fin] "d\\1"]
但是,这将一次将所有数据保存在内存中。