删除任何字符串并重写

时间:2018-01-31 16:27:44

标签: tcl

我想从我的文件中删除任何字符串,但我仍然卡住了。

;#删除的第一个文本

{{another_matched}}

;#删除的第二个文本

set findFirstText [format {test test
test test
test test
}]

;#

set findSecondText "second text"

提前致谢。

1 个答案:

答案 0 :(得分:0)

到目前为止,最简单的机制是将整个文件加载到内存中并使用整个字符串搜索和替换。

set transform {}
lappend transform $findFirstText ""
lappend transform $findSecondText ""

set f [open "data.dat" r]
# Best to apply the transform immediately; enables better memory management
set data [string map $transform [read $f]]
close $f

set f [open "data.new" w]
puts -nonewline $f $data
close $f

以上只有在您可以使文本找到文字字符串并且用另一个字符串替换它时(例如,空字符串)才有效。如果您需要找到更复杂的模式(例如,包含某些字符串的行),那么最好使用正则表达式:

# Assume no RE metacharacters in the target string; letters, numbers and whitespace all OK
set RE "^.*(?:$findFirstText|$findSecondText).*$"

set f [open "data.dat" r]
set data [regsub -all -line -- $RE [read $f] "" data]
close $f

set f [open "data.new" w]
puts -nonewline $f $data
close $f

如果文件“小”,能够一次性将变换应用于整个文件内容仍然是获得合适速度的关键。在大多数现代计算机上,几百兆字节的文件仍然小到足以“小”。