• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Textdatei + include Anweisungen mit grep durchforsten

PC-Ulf

Member
Weiß jemand wie ich mit Standard Kommandos Dateien (z.B. Konfigurationsdateien) inklusive eingebundene include mit grep durchsuchen kann.

Zum Beispiel
Code:
cat httpd.conf | grep <VirtualHost>
gibt mir den <VirtualHost> nur aus, wenn dieser auch in httpd.conf steht. Dummerweise ist dieser Eintrag oft mit include Anweisungen ausgegliedert. Wie kann ich also cat, less, tail oder so dazu bewegen, diese inklusive eingebundene includes auszugeben :?:

Hat jemand eine Idee :?: Oder ein Skript Vorschlag :?:
 

scg

Hacker
Hab ich das so verstanden, dass die Einträge auch in anderen *.conf-Dateien stehen ? Dann wäre doch

grep VirtualHost *.conf

mal ein erster Schritt.

Übrigens:
man grep
 
OP
PC-Ulf

PC-Ulf

Member
Ach, wäre das schön wenn die Lösung so einfach wär. Trotzdem danke für Deinen Einsatz :lol:

Die Situation kommt oft bei Konfigurationsdateien vor. Und nicht nur dort, auch bei Skripten.

include -Anweisungen (die geladene Dateien liegen nicht immer in der gleichen Verzeichnisstruktur) dienen sicherlich der Übersichtlichkeit und Wartung. Ich selber arbeite intensiv in meinen Skripten damit.

Die Situation läuft ist diese:
  • Konfigurationsdatei einlesen
    include Dateien anstelle includes einbinden (wie ein Präprozessor)
    Textdatei als ganzes zur Übergabe am nächsten Pipeline-Kommando
und anschießend z.B. mit grep durchsuchen.

Ich möchte diesen Prozess gerne automatisiert haben. Übrigens brauche ich dies vor allem um Fragen besser beantworen zu können, siehe Beispiel mit httpd.conf (Apache).

Das wird doch mit Shell Kommandos gehen, oder :?:
Hat noch einer eine Idee, würde mich sehr freuen.
:wink:
 

NeoMan

Member
Hi PC-Ulf,

ich verteh dein Vorhaben nicht so richtig. Was hat es den mit dein include auf sich? Wenn du es von einer "anderen Seite" her nochmal beschreiben könntest, können wir dir bestimmt helfen...


MfG NeoMan
 
OP
PC-Ulf

PC-Ulf

Member
Was hat es mit einer include auf sich :?:

Mit der include Funktion lagert man Text aus. Bleiben wir z.B. bei httpd.conf. Hier wird z.B. unter Confixx die Einträge <VirtualHost> in einer externen Datei ausgelagert. Der Gedanke dahinter ist sicherlich das ein Server hunderte solcher Einträge beherbergen kann. Deshalb wird es sinnvollerweise aus der Konfigurationsdatei ausgelagert. Wird nun Apache gestartet, wird die httpd.conf inklusive der exterenen Dateien über include abarbeitet.

Es ist ziemlich das gleiche wie in Programmiersprachen z.B. Bibliotheken eingebunden werden (dies übernimmt der Präprozessor, erst danach kann das compilieren beginnen).

Bei Konfigurationsdateien ist ziemlich klar welche Einträge vorhanden sind und gegebenfalls abgeändert werden sollen, oder nur eingesehen müssen.
Da jede Distribution und sogar die Paketverwalter die include Anweisungen unabhängig setzen, ist auf jeder Plattform (Versionen) die ausgelagerten Einträge in anderen externen Dateien zu finden.

Da schnell über 10 include Anweisungen vorhanden sind, ist es sehr umständlich auf jeder Plattform die gesuchten Einträge zu finden.

Diesen Prozess möchte ich gern automatisieren. Die Lösung sollte nicht schwer sein, ich komme nur im Moment nicht drauf.
 

NeoMan

Member
PC-Ulf, was ein include-Statemant ist und wozu man es verwendet das weiß ich.

Trotzdem versteh ich noch nicht so recht, was du jetzt mit grep durchsuchen möchtest.

Bin eigentlich nicht schwer von Begriff... :)

Vielleicht kann dir jemand anderes helfen, sorry...


MfG NeoMan
 
OP
PC-Ulf

PC-Ulf

Member
Erstmal Danke für Dein Interesse. :wink:

Vielleicht mache ich ja alles wieder zu kompliziert.

Ich suche z.B. die Einträge von <VirtualHost> in httpd.conf. Wenn diese nicht direkt in httpd.conf liegen, erhalte ich mit
Code:
cat httpd.conf | grep <VirtualHost>
keine Ausgabe.

Nun müßte ich die include Anweisungen ausgeben lassen und diese jeweils mit den Kommandos durchforsten. Genau diesen Vorgang will ich automatisieren :!:

Gesucht:
Kommando der die Textdateien mit eingebundenen include zusammenfügt. Somit kann ich die gesamte Konfiguration mit grep durchsuchen, ohne mich um die includes kümmern zu müssen.
Ideal wäre, wenn bei der Ausgabe die eingebunde include als Hinweis ausgegeben wird, so das man weiß welche ausgelagerte Datei für den Eintrag zuständig ist.
 

NeoMan

Member
Hi Pc-Ulf,

nun kommt langsam Licht ins Dunkle. Jedenfalls weiß ich nun was du machen möchtest. Es ist mir aber kein Kommando bekannt, womit man soetwas erreichen kann.

Aber wieso durchsuchst du nicht das ganze Dateisystem bzw. z.B. /etc nach Begriffe mit grep. Natürlich wirst du die Zusammenhänge dann nicht erkennen können.

Mal sehen, vielleicht fällt mir noch ne Lösung ein...


MfG NeoMan
 

scg

Hacker
Darf ich deine Aufmerksamkeit mal auf

awk

(man awk, sowie Boardsuche z.B. hier in der Konsole im WICHTIG)

lenken ?

Dort kannst du zeilenweise komplexere Bedingungen definieren.

So wäre es eine Möglichkeit in einem Skript,

1. das direkte Vorkommen von <VirtualHost> zu berücksichtigen
UND
2. bei einem Auftauchen einer include-Anweisung das awk-skript rekursiv zu rufen.

Damit hast du dann beide Fälle (direkt und über include) erschlagen und das in beliebiger Schachtelungstiefe. Eine mögliche Suchstrategie des Apachen für seine includes ist dabei nicht berücksichtigt, die muss nachgebildet werden.

Versuch mal ob du es hinkriegst, ansonsten melde dich nochmal, ich hab derzeit nur nicht übermässig Zeit für Details, weil ich mitten im Umzug stecke. :cry:
 
Oben