es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La ramificación sed no funciona en OSX: etiqueta indefinida.

Estoy tratando de adaptar la respuesta de https://stackoverflow.com/a/66365284/1236401 que agrega control de flujo para proporcionar el código de estado de coincidencia:

cat file.txt | sed 's/1/replaced-it/;tx;q1;:x'

Funciona como se espera en Ubuntu y Alpine, pero falla en Mac OSX (11.6), utilizando cualquier shell.

sed: 1: “s/1/replaced-it/;tx;q1;:x”: etiqueta no definida ‘x;q1;:x’

Todas las referencias que pude encontrar sobre el comportamiento incorrecto de sed en OSX eran para la edición de archivos en su lugar, lo que no es el caso aquí.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema con el comando anterior es que la etiqueta :x no está permitida para ser seguida inmediatamente por otro comando (q1 en este caso) en macOS. Para solucionarlo, necesitamos agregar un punto y coma entre la etiqueta y el comando, así:

    cat file.txt | sed 's/1/replaced-it/;tx;q1;:x'
    

    Al agregar el punto y coma, separamos la etiqueta del siguiente comando, y el comando ahora es reconocido como parte de la estructura de control de flujo. Esto debería resolver el problema en macOS y permitir que el comando funcione como se espera.

Comments are closed.