Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

803
Vistas
sed: -no se puede usar con stdin en Mac OS X

Estoy usando un analizador bisonte en mi proyecto. Cuando ejecuto el siguiente comando:

 sed -i y.tab.c -e "s/ __attribute__ ((__unused__))$/# ifndef __cplusplus\n __attribute__ ((__unused__));\n# endif/"

Recibo este error sed: -i may not be used with stdin

El comando funciona bien en máquinas Linux. Estoy usando Mac OS X 10.9. Lanza un error solo en mac os x. No estoy seguro por qué. ¿Alguien puede ayudar?

Gracias

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

El problema es que Mac OS X usa la versión BSD de sed , que trata la opción -i de forma ligeramente diferente. La versión de GNU utilizada en Linux toma un argumento opcional con -i : si está presente, sed un archivo de respaldo cuyo nombre consiste en el archivo de entrada más el argumento. Sin argumentos, sed simplemente modifica el archivo de entrada sin guardar una copia de seguridad del original.

En BSD sed , se requiere el argumento para -i . Para evitar hacer una copia de seguridad, debe proporcionar un argumento de longitud cero, por ejemplo, sed -i '' y.tab.c ... .

Su comando, que simplemente edita y.tab.c sin respaldo en Linux, intentará guardar un archivo de respaldo usando 'y.tab.c' como extensión. Pero ahora, sin otro archivo en la línea de comando, sed cree que desea editar la entrada estándar en el lugar, algo que no está permitido.

over 4 years ago · Santiago Trujillo Denunciar

0

De la página de manual de sed:

-i extensión Editar archivos en el lugar, guardando copias de seguridad con la extensión especificada. Si se proporciona una extensión de longitud cero, no se guardará ninguna copia de seguridad. No se recomienda dar una extensión de longitud cero cuando se editan archivos en el lugar, ya que corre el riesgo de corrupción o contenido parcial en situaciones en las que se agota el espacio en disco, etc.

La solución es enviar una extensión de longitud cero como esta:

 sed -i '' 's/apples/oranges/' file.txt
over 4 years ago · Santiago Trujillo Denunciar

0

Debe colocar el archivo de entrada como último parámetro.

 sed -i -e "s/ __attribute__ ((__unused__))$/# ifndef __cplusplus\n __attribute__ ((__unused__));\n# endif/" y.tab.c
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda