unix - 如何使用tcl文件中的sed

标签 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终端运行时,该命令运行正常

我究竟做错了什么?

最佳答案

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/

相关文章:

unix - sed错误: unterminated 's' command

php - 使用 PHP exec() 和 Python PDF 订书机工具将 PDF 拆分为单页

c - 如何从 unix 中的当前时间获取小时值(使用 C)

bash - 如何仅打印我当前所在的当前目录

regex - 在 Bash 中将 vim 替换为 sed/awk

linux - 是否可以使用 Linux 的 clone() 系统调用在同一地址空间中运行多个应用程序?

java - C 程序在运行时执行 shell 相对于 JAVA 中的输入和输出

unix - 'ls -l' 在 groovy

linux - Grep:如果一行包含不需要的字符串,如何排除之前/之后的行?

bash - 如何使用 sed 或 awk 在模式后删除某些字符?