如何从一个tcl文件使用sed

我试图在tcl文件中使用Unix“sed”命令forms,如下所示:(将多个空格更改为一个空格)

exec /bin/sed 's/ \+/ /g' $file 

我也尝试了exec /bin/sed 's/ \\+/ /g' $file (一个额外的反斜杠)

没有版本的工作,我得到的错误

 /bin/sed: -e expression #1, char 1: Unknown command: `'' 

从linuxterminal运行该命令工作正常

我究竟做错了什么?

我究竟做错了什么?

你做错了什么是使用' (单引号)字符。 它们对于Tcl来说并不特别。 Tcl中的等价物是{大括号}一个单词。 对里面的人物没有特别的处理。 因此,你想要做的是:

 exec /bin/sed {s/ +/ /g} $file 

请注意,如果你正在做一些更复杂的事情,并且Tcl限制全文没有被引用,那么你可以这样做:

 exec /bin/sh -c "sed 's/ +/ /g' $file" 

或者, 真正的惯用Tcl只是不使用sed来实现这个简单的事情:

 set f [open $file] set replacedContents [regsub -all { +} [read $f] " "] close $f 

使用exec /bin/sed "s/\ +/\ /g" $file

“\”告诉TCL这里有一个空间。 同样使用'“'正确配置字符串。