Error en SED unix : “sed: -e expresión #1, carácter 14: orden `s’ sin terminar”

publicado por: Anonymous

Al ejecutar esta sentencia:

sed -e 's/á/á/g' ./fichero_entrada > ./fichero_destino

Me aparece este error:

sed: -e expresión #1, carácter 14: orden `s' sin terminar

La sentencia está dentro de un fichero .sh que ejecuto por línea de comandos.

He probado en distintos tipos de shell: sh, Bash, sch… y el resultado es el mismo.

solución

Cuando ejecutas una expresión de substitución en sed tiene este formato:

's/expresión regular/sustitución/[FLAGS]'

Sin embargo, si por algún motivo omites alguno de los bloques, es decir, si te dejas alguna barra, te salta el error:

sed: -e expresión #1, carácter 14: orden `s’ sin terminar

o, en inglés:

sed: -e expression #1, char 14: unterminated `s’ command

Veamos un ejemplo:

$ sed 's/hola/adiós/' <<< "hola amigüitos"
adiós amigüitos
$ sed 's/hola/adiós' <<< "hola amigüitos"
#                  ^---------------------------falta la /
sed: -e expression #1, char 13: unterminated `s' command

Por tanto, lo importante es darse cuenta de dónde se ha producido esta omisión.


En tu caso concreto parece que sed está interpretando, por algún motivo desconocido, que el comando no está completo, pese a sí estarlo. Probablemente se deba al uso de una tilde, en base a lo que comentaste en la pregunta en Stack Overflow en inglés. Por tanto, puedes solucionarlo usando el carácter hexadecimal en lugar de á directamente:

sed -e 's/xE1/á/g'

Y nótese que este es un buen truco para cuando debes modificar caracteres molestos, como las comillas. Comparemos por ejemplo cómo modificar la comilla simple de forma pedestre y usando el código hexadecimal (27):

$ sed 's/hola/ho'''la/' <<< "hola"
ho'la
$ sed 's/hola/hox27la/' <<< "hola"
ho'la
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *