我正在尝试在tcl文件中使用Unix"sed"命令表单,如下所示:(将多个空格更改为一个空格)
exec /bin/sed 's/ \+/ /g' $file
Run Code Online (Sandbox Code Playgroud)
我也尝试过exec /bin/sed 's/ \\+/ /g' $file (额外的反斜杠)
没有版本工作,我得到错误
/bin/sed: -e expression #1, char 1: Unknown command: `''
Run Code Online (Sandbox Code Playgroud)
从linux终端运行时,该命令工作正常
我究竟做错了什么?
Don*_*ows 20
我究竟做错了什么?
你做错了就是使用'(单引号)字符.他们不是特别到Tcl的根本.Tcl中的等价物用{括号括起一个单词}; 它对内部人物没有任何特殊处理.因此,你想要做的是:
exec /bin/sed {s/ +/ /g} $file
Run Code Online (Sandbox Code Playgroud)
请注意,如果你正在做一些更复杂的事情并且Tcl对整个单词的限制没有引用,那么你可能会改为:
exec /bin/sh -c "sed 's/ +/ /g' $file"
Run Code Online (Sandbox Code Playgroud)
或者,真正惯用的Tcl只是不使用sed这么简单:
set f [open $file]
set replacedContents [regsub -all { +} [read $f] " "]
close $f
Run Code Online (Sandbox Code Playgroud)