我正在尝试在tcl文件中使用Unix“sed”命令形式,如下所示:
(将多个空格更改为一个空格)
exec /bin/sed 's/ \+/ /g' $file
我也尝试了
exec /bin/sed 's/ \\+/ /g' $file
(一个额外的反斜杠)没有任何版本,我得到了错误
/bin/sed: -e expression #1, char 1: Unknown command: `''
从Linux终端运行时,该命令运行正常
我究竟做错了什么?
最佳答案
What am I doing wrong?
您在做错的是使用
'
(单引号)字符。它们根本不是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
关于unix - 如何使用tcl文件中的sed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4123585/