RegEx und sed/grep hilfe

Häufig möchte ich Konfigurationsdateien von überflüssigen Ballast befreien und alles entsorgen, was mit einer Raute (#) beginnt. Dieses gelingt mir normalerweise mit:

egrep '^[^#]' /etc/apache2/apache2.conf

Doch am Apache scheitert es, denn obere Zeile bedingt, das eben die Raute am Anfang steht. Findet sich jedoch da ein Leerzeichen (od. mehrere) und dann erst die Raute, erwische ich diese Zeilen nicht. Wäre nett, wenn mich da mal jemand in die richtige Richtung führen könnte.

Deine IP ist:
38.107.179.209

6 Kommentare

  • Jens Herden
    geschrieben am September 7, 2007 um 8:32 Uhr | Permalink

    Bei grep gibt es auch Zeichenklassen, eine davon ist [:space:]
    Du könntest also vielleicht

    egrep –invert-match ‘^[:space:]*#’ /etc/apache2/apache2.conf

    benutzen.
    Ist ungetestet, aber logisch.

  • geschrieben am September 7, 2007 um 8:33 Uhr | Permalink

    egrep -v ‘^ *(#|$)’ /etc/blah

  • geschrieben am September 7, 2007 um 10:11 Uhr | Permalink

    @Jens genau das selbe habe ich auch probiert, hat aber nicht geklappt, aber das was Martin geschickt hatm it dem “$” Zeichen, das hat funktioniert.

    @Martin, kannst du mir erklären, warum $ klappt, aber nicht [:space:] ?

  • Jens Herden
    geschrieben am September 7, 2007 um 12:22 Uhr | Permalink

    Lustig, es kann noch so logisch sein und trotzdem nicht funtkionieren :-(
    Jetzt habe ich es versucht und siehe da es geht mit:

    egrep -v ‘^[[:space:]]*#’

    Vorteil ist es werden auch Tabs erkannt.

    @Martin deine Lösung funktioniert auch ohne das $, oder?

  • geschrieben am September 7, 2007 um 15:30 Uhr | Permalink

    Meine Regex beschreibt eine Zeile, die:
    - Mit null oder mehr Leerzeichen anfängt.
    - Und mit einem # oder dem Zeilenende weitergeht.

    Damit werden auch Leerzeilen erwischt und Zeilen wo nur Leerzeichen stehen.

    Tabs werden davon nicht abgedeckt, aber man kann eben “auf die Schnelle” nicht alles haben. ;-)

  • geschrieben am September 7, 2007 um 18:17 Uhr | Permalink

    ahhh, danke. Jetzt habe ich es kapiert. :-)