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

如何在tcl中使用sed和printf定义文本区域,tcl,Tcl,您好,我尝试在tcl脚本中使用sed和printf添加定义的文本区域%-74s,但我不确定如何将printf信息添加到我的代码行中 放入$f“sed-i”s/XXXTLEXXX/\$1/\“/$file” 任何帮助都将不胜感激 我尝试了一些组合,但所有的错误都是你的问题是,你需要在一个字符串中指定有限的替换,但该字符串包含$,“和\中的字符。这些特殊字符意味着在Tcl中使用普通的双引号单词非常尴尬;您可以使用大量反斜杠来引用TCL元字符,但当大部分字符串使用另一种语言(在您的示例中为shell/

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

放入$f“sed-i”s/XXXTLEXXX/\$1/\“/$file”

任何帮助都将不胜感激
我尝试了一些组合,但所有的错误都是

你的问题是,你需要在一个字符串中指定有限的替换,但该字符串包含
$
\
中的字符。这些特殊字符意味着在Tcl中使用普通的双引号单词非常尴尬;您可以使用大量反斜杠来引用TCL元字符,但当大部分字符串使用另一种语言(在您的示例中为shell/sed)时,这就太可怕了。这里有一个更好的选项,可以使用
字符串映射
和大括号引用的单词(无替换):


请注意,您可以在一个
字符串映射中执行多个替换,并且它可以在任何地方执行每个替换。您也可以使用多行文字。(
%FILE%
被选为字符串中没有出现的文本。根据需要选择您自己的文本,但输入名称有助于提高可读性。)

我看不到您试图实现的目标。你想从Tcl脚本中调用
sed
,那么你应该使用。我想在我的sed行中加入printf函数%-74s来定义边界之间的白色间距Tcl在这出戏中的作用是什么?为了确保我说得对,我应该在%FILE%所在的地方添加%-74s部分,使它成为set str{sed-I“s/xxxtlexxxx/$1/”/%-74s%}?
set str {sed -i "s/XXXTLEXXX/$1/" /%FILE%}
puts $f [string map [list "%FILE%" $file] $str]