我怎麼能替換文本文件中的特定行的Tcl例如:我如何替換文本文件中的行?
a.txt
包含:
John
Elton
,我需要更換內容b.txt
包含:
John
Belushi
在Bash中,我知道我可以使用:sed '2s/.*/Belushi/' a.txt > b.txt
。但它不起作用。
我怎麼能替換文本文件中的特定行的Tcl例如:我如何替換文本文件中的行?
a.txt
包含:
John
Elton
,我需要更換內容b.txt
包含:
John
Belushi
在Bash中,我知道我可以使用:sed '2s/.*/Belushi/' a.txt > b.txt
。但它不起作用。
可以有很多種方法。如果你想使用相同的sed
命令,你可以很好地與exec
命令
#!/usr/bin/tclsh
exec sed {2s/.*/Belushi/} a.txt > b.txt
爲什麼我們用括號,而不是單引號括起來的原因是防止任何換人做。
做更換的純Tcl的方式是這樣的:
# Read the lines into a Tcl list
set f [open "a.txt"]
set lines [split [read $f] "\n"]
close $f
# Do the replacement
lset lines 1 "Belushi"
# Write the lines back out
set f [open "b.txt" w]
puts -nonewline $f [join $lines "\n"]
close $f
的只是隱約有點棘手的是,你需要-nonewline
不然你會從puts
額外的換行符;我們提供了我們希望它生成的所有新行。