如何从tcl文件中使用sed

时间:2010-11-08 11:58:00

标签: unix sed exec tcl

我正在尝试在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终端

运行时,该命令工作正常

我做错了什么?

2 个答案:

答案 0 :(得分:20)

  

我做错了什么?

你做错了是使用'(单引号)字符。它们对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

答案 1 :(得分:1)

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

'\'告诉TCL那里有一个空间。另外使用'''正确配置字符串。