2014-10-27 5 views
0

Как я могу заменить определенную строку в текстовом файле в Tcl, например:Как заменить строку в текстовом файле?

a.txt содержит:

John 
Elton 

и мне нужно заменить содержимое b.txt, который содержит:

John 
Belushi 

В Bash я знаю, что могу использовать: sed '2s/.*/Belushi/' a.txt > b.txt. Но это не сработает.

ответ

1

Существует множество способов. Если вы хотите использовать один и те же sed команду, вы можете очень хорошо сделать это с exec команды

#!/usr/bin/tclsh 
exec sed {2s/.*/Belushi/} a.txt > b.txt 

Причина, почему мы цитировали это с фигурными скобками вместо одинарных кавычек, чтобы предотвратить какую-либо замену.

1

Чистый 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; мы поставляем все новые строки, которые хотим, чтобы они уже производились.

Смежные вопросы