Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

791
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!