Wie kann ich mir vorstellen, dass jede Art von Kommentar aus einer Datei entfernt wird (einschließlich /* */)?

Wie kann ich mir vorstellen, dass jede Art von Kommentar aus einer Datei entfernt wird (einschließlich /* */)?

Ich habe dieses kleine Skript, um Konfigurationsdateien ohne Kommentarzeilen zu visualisieren:

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

Aber es werden in einigen Dateien immer noch Kommentare angezeigt, wenn diese /* */ enthalten.

Wie kann ich eine Datei visualisieren und dabei alle Kommentare entfernen, einschließlich /* */ ? Ich denke daran, ein Bash-Skript zu erstellen, das zeilenweise nach dem Öffnen und Schließen dieser Kommentare sucht. Aber ich stelle mir vor, dass das eine bessere Möglichkeit sein muss, dies zu tun.

Alle Optionen, die ich gesehen habe (wie diese:http://bit.ly/1BsdcDI) behandelt diese Art von Kommentaren nicht.

Gibt es hierfür bereits ein Tool oder Skript?

Jede Hilfe ist willkommen, danke.

BEARBEITEN

wie oben erwähnt, ziele ich speziell auf Konfigurationsdateien ab. Die Ausschlussregeln lauten also:

  • jede Zeile, die mit „#“, „;“ oder „//“ beginnt
  • alle Zeilen vom Anfang /* bis zum */
  • Entfernen Sie keine Zeilen, die kein /* am Zeilenanfang haben (also gültige Codes vor /* haben) oder */ vor dem Zeilenende haben (also gültige Codes nach */ haben)

LÖSUNG:

Basierend auf der Antwort von @cusco und dem Code von @EdMorton habe ich dieses Bash-Skript erstellt, um das zu tun, was ich möchte.

#!/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

Antwort1

überprüfenhttps://stackoverflow.com/questions/13061785/remove-multi-line-comments

Es enthält das folgende Skript

[ $# -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'

verwandte Informationen