как использовать sed из файла tcl - PullRequest
8 голосов
/ 08 ноября 2010

Я пытаюсь использовать Unix-форму команды sed в файле tcl, например так: (чтобы изменить несколько пробелов на один пробел)

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

Я также пытался exec /bin/sed 's/ \\+/ /g' $file (дополнительная обратная косая черта)

ни одна из версий не работает, и я получаю сообщение об ошибке

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

Команда отлично работает при запуске из терминала linux

Что я делаю неправильно

Ответы [ 2 ]

20 голосов
/ 08 ноября 2010

Что я делаю не так?

То, что вы делаете неправильно, использует ' (одинарные кавычки) символы.Они не являются особенными для Tcl вообще .Эквивалент в Tcl заключает слово в { фигурные скобки };это не дает особого отношения к персонажам внутри.Таким образом, то, что вы стремитесь сделать, было бы:

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

Имейте в виду, если вы делаете что-то более сложное и ограничиваете Tcl целыми словами без кавычек, тогда вы можете вместо этого пойти на это:

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

Или real идиоматический Tcl просто не использует sed для чего-то такого простого:

set f [open $file]
set replacedContents [regsub -all { +} [read $f] " "]
close $f
1 голос
/ 08 ноября 2010

Использование exec /bin/sed "s/\ +/\ /g" $file

'\' сообщает TCL, что там есть пробел.Также использование «» корректно настраивает строку.

...