2010-11-08 18 views
7

Estoy intentando utilizar el Unix "sed" formato de comando en un archivo de TCL, así: (para cambiar múltiples espacios a un espacio)cómo usar sed de un archivo TCL

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

I también probamos exec /bin/sed 's/ \\+/ /g' $file (una barra inversa extra)

ninguno de los trabajos versión, y me sale el error

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

el comando funciona bien cuando se ejecuta desde un terminal Linux

¿Qué estoy haciendo mal?

Respuesta

18

¿Qué estoy haciendo mal?

Lo que estás haciendo mal está utilizando ' caracteres (comilla simple). No son de especial . tcl en absoluto El equivalente en Tcl se encierra una palabra en { apoyos }, sino que da un tratamiento especial en absoluto a los caracteres dentro de este modo, lo que tratan de hacer sería:.

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

Eso sí, si estás haciendo algo más complejo y la restricción de Tcl a palabras completas estar sin comillas, entonces es posible que en lugar de ir para esto:

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

O verdadera idiomática Tcl simplemente doesn' t usar sed para algo tan simple:

set f [open $file] 
set replacedContents [regsub -all { +} [read $f] " "] 
close $f 
+0

+1 para completar –

1

Uso exec /bin/sed "s/\ +/\ /g" $file

El '\' dice TCL que hay un espacio allí. También a través del '"' configura correctamente la cadena.

+3

más simple de hacer: exec/bin/sed {s/+// g} $ archivo - citando con {} en Tcl es equivalente a citar con '' en el cáscara. –

+0

no es necesario para escapar de los espacios dentro de una cadena entre comillas. –

+0

Gracias, funciona genial :) :) –

Cuestiones relacionadas