如何在 tcl 中使用 sed 和 printf 定义文本区域

How do I define a text area using sed and printf in tcl

您好,我尝试在我拥有的 tcl 脚本中使用 sed 和 printf 添加定义的文本区域 %-74s,但我不确定如何将 printf 信息添加到我拥有的代码行中

puts $f "sed -i "s/XXXTLEXXX/$1/\" /$file";

任何帮助将不胜感激 我尝试了一些组合,但都出错了

您的问题是您需要绘制一个字符串,其中包含有限的替换,但该字符串中包含 $"\ 个字符。那些特殊字符意味着在 Tcl 中使用普通的双引号是很尴尬的;您可以使用大量反斜杠来引用 TCL 元字符,但是当大部分字符串使用另一种语言(在您的情况下为 shell/sed)时,这太可怕了。这是一个更好的选择 string map 和一个大括号引号(没有替换):

set str {sed -i "s/XXXTLEXXX//" /%FILE%}
puts $f [string map [list "%FILE%" $file] $str]

请注意,您可以在一个 string map 中进行多个替换,并且它会尽可能地进行每个替换。您也可以使用多行文字。 (%FILE% 被选为字符串中未出现的文字。根据需要选择您自己的文字,但将名称放入有助于提高可读性。)