¿Cómo puedo visualizar un archivo eliminando todo tipo de comentarios de un archivo (incluido /* */)?

¿Cómo puedo visualizar un archivo eliminando todo tipo de comentarios de un archivo (incluido /* */)?

Tengo este pequeño script para visualizar archivos de configuración sin las líneas de comentarios:

cat $1 | grep -Ev '[:blank]*#|^[:blank]*$' | pygmentize -g

pero todavía muestra algunos comentarios en algunos archivos cuando tienen el /* ​​*/.

¿Cómo puedo visualizar un archivo, eliminando todos los comentarios, incluido /* */? Estoy pensando en hacer un script bash con línea por línea buscando la apertura y el cierre de estos comentarios. Pero me imagino que debe ser una mejor manera de hacer esto.

Todas las opciones que he visto (como esta:http://bit.ly/1BsdcDI) no trata este tipo de comentarios.

¿Existe alguna herramienta o script ya creado para esto?

Se agradece cualquier ayuda, gracias.

EDITAR

Como se mencionó anteriormente, estoy apuntando específicamente a archivos de configuración. Entonces las reglas de exclusión serán:

  • cualquier línea que comience con '#', ';' o '//'
  • cualquier línea desde el inicio /* hasta el */
  • no elimine ninguna línea que no tenga /* al inicio de la línea (es decir, que tenga códigos válidos antes de /*) o que no tenga */ antes del final de la línea (es decir, que tenga códigos válidos después de */)

SOLUCIÓN:

Basado en la respuesta de @cusco y el código de @EdMorton, he creado este script bash para hacer lo que quiero.

#!/bin/bash
[ $# -eq 2 ] && arg="$1" || arg=""
eval file="\$$#"
sed 's/a/aA/g;s/__/aB/g;s/#/aC/g' "$file" |
          gcc -P -E $arg - |
          sed 's/aC/#/g;s/aB/__/g;s/aA/a/g' |
          grep -Ev '^[:blank]*#|^[:blank]*$' |
          grep -Ev '^[:blank]*\;|^[:blank]*$' |
          pygmentize -g

Respuesta1

controlarhttps://stackoverflow.com/questions/13061785/remove-multi-line-comments

tiene el siguiente script

[ $# -eq 2 ] && arg="$1" || arg=""
eval file="\$$#"
sed 's/a/aA/g;s/__/aB/g;s/#/aC/g' "$file" |
          gcc -P -E $arg - |
          sed 's/aC/#/g;s/aB/__/g;s/aA/a/g'

información relacionada