GNU/Linux >> Tutoriales Linux >  >> Linux

¿Eliminar todos los comentarios de C con Sed?

Esta pregunta ya tiene respuestas aquí :¿Cómo puedo eliminar todos los caracteres que caen bajo /* … */ incluidos /* y */?

(9 respuestas)
Cerrado hace 4 años.

Estoy tratando de escribir una secuencia de comandos que elimine todos los comentarios y todo lo demás dentro de los archivos C en mi directorio actual. He estado usando sed , y esto es lo que tengo hasta ahora:

sed -i '/ * [^()] */d' *.c

Esto funciona cuando los comentarios están en la misma línea que un asterisco o una barra invertida.

Sin embargo, no funciona cuando hay una línea comentada sin barra o asterisco.

Sé que sed va línea por línea, pero no sé cómo decirle que siga eliminando hasta que vea un */ .

Respuesta aceptada:

Eliminar comentarios sin usar un preprocesador C real no es exactamente trivial. Una vez se me ocurrió algo como esto:

perl -0777 -pe'
 s{
     /*.*?*/
   | //[^n]*
   | (
        "(?:\.|.)*?"
      | '''(?:\.)?.*?'''
      | ??'''
      | .[^'''"/]*
     )
  }{if ($1eq""){" "}else{$1}}exsg' 

Que debería cubrir la mayoría de los casos como cosas como:

printf("%c%c%s", '"' /* d-quote */, ''', "/*" "*/");

Consulte la interesante discusión allí para obtener más detalles.


Linux
  1. Adición Con 'sed'?

  2. sed principiante:cambiar todas las ocurrencias en una carpeta

  3. Usando sed para dividir una cadena con un delimitador

  4. Cómo eliminar el carácter \r con sed

  5. ¿Cómo reemplazar recursivamente los caracteres con sed?

¿Mostrar todo el archivo hasta el partido?

¿Colorear la salida de la cola con Sed?

Imprimir comentarios con PDF?

línea de inserción sed con espacios a una línea específica

Expresión regular con sed

¿Cómo enumero a todos los usuarios con root?