Shell Skripte zum Auslesen von Konfig Werten - grep ?

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von itfreak, 05.10.2010.

  1. #1 itfreak, 05.10.2010
    Zuletzt bearbeitet: 05.10.2010
    itfreak

    itfreak Grünschnabel

    Dabei seit:
    05.10.2010
    Beiträge:
    2
    Zustimmungen:
    0
    Hallo,

    ich versuche gerade folgendes Problem zu lösen:

    In einer Datei treten mehrfach folgende Sequenzen mit unterschiedlichen Werten auf:

    Code:
    comment {
    	host_name=xxx
    	comment_id=1234
    	persistent=0
    	expire_time=0
    	author=Mr X.
    	comment_data="HalloWelt"
    	}
    Nun soll anhand des Atrributes "comment_data" auf die comment_id geschlossen werden. Also Eingabe "HalloWelt" und return "1234".

    Lässt sich das umetzen ?

    Ich habe bisher diesen Befehl:
    Code:
    less status.dat | grep comment_data | tail -4
    Wie bekomme ich den grep dazu das er mir die vorhergegangen Zeilen mitausgibt?

    Comentan bekomme ich nur die Zeile: comment_data="HalloWelt"

    Vielen Dank für Hilfe.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Deine grep-Syntax ist unnoetig ueberladen, die zu durchsuchende Datei solltest Du nicht vorher an 'less' uebergeben. Und der Parameter, den Du vermutlich suchst, ist '-B'
    Code:
    grep -B4 comment_data status.dat
    . Diesen Ausdruck kannst Du nun weiterverarbeiten. Setzt allerdings voraus, dass der Eintrag 'comment_id' auch tatsaechlich in den vier Zeilen vor 'comment_data' vorkommt. Ansonsten musst Du wohl eine Sprache wir awk oder perl benutzen.
     
  4. #3 floyd62, 05.10.2010
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Wenn deine Daten immer so aussehen wie im Beispiel, also zunächst ein 'comment_id= ...' gefolgt von 'comment_data="..."' mit dem gesuchten String, kannst du auch sed versuchen:
    Code:
    SEARCH="HalloWelt"
    sed -n -e '/comment_id/h' -e '/comment_data="'$SEARCH'"/{p;x;p}' <status.dat
    
    Gruss, A.
     
  5. #4 tuxlover, 05.10.2010
    tuxlover

    tuxlover Der den Tux knuddelt

    Dabei seit:
    26.10.2005
    Beiträge:
    2.106
    Zustimmungen:
    0
    Ort:
    berlin
    ich würde meinen dass das eine Anwendung für awk ist,

    was passiert denn wenn du mal folgendes machst?

    Code:
    awk 'BEGIN{RS="{", FS="/n" } {print $2 $6}' 
    
     
  6. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    @tuxlover: Die Syntax scheint ziemlich verhauen, zumindest mit GNU awk 3.1.5. Besser scheint es mit
    Code:
     awk 'RS="{", FS="\n"  {print $2 $6}' test.datei
    zu funktionieren.
     
  7. #6 itfreak, 11.10.2010
    Zuletzt bearbeitet: 11.10.2010
    itfreak

    itfreak Grünschnabel

    Dabei seit:
    05.10.2010
    Beiträge:
    2
    Zustimmungen:
    0
    Hey, vielen danke für die Hilfe, hätte ich nie hinbekommen.

    Das letztere funtzt in meinem Fall nicht zuverlässig. Liegt daran das noch anderes Strukturen in der status.dat ,also comments mit weniger Attributen auftauchen.

    Hab das mit dem grep gemacht.

    Aber ich habe da noch ein anderes Problem:

    Ein weiteres Skript soll nun auch nach dem Alter des Commentares Filtern.
    Code:
    servicecomment {
        host_name=xzy
        service_description=Process:Watcher
        entry_type=1
        comment_id=1234
        source=1
        persistent=0
        entry_time=1286789896
        expires=0
        expire_time=0
        author=server
        comment_data=HelloWorld
        }
    Code:
    text='author=server'
    path='./status.dat'
    grep -B6 "$text" "$path" | grep entry_time |sed 's/entry_time=//g' 
    grep -B6 "$text" "$path" | grep comment_id | sed 's/comment_id=//g'
    So erhalte ich zwei Listen:
    Mit einem Timestamp
    Code:
           1286789896
            1286790016
            1286790137
            1286790257
            1286790378
            1286790498
            1286790619
            1286790739
            1286790860
            1286790980
            1286791100
            1286791221
            1286791341
            1286791462
            1286791582
            1286791702
            1286791823
            1286791943
            1286792064
            1286792184
            1286792305
            1286792425
            1286792545
            1286792666
            1286792787
            1286792907
            1286793028
            1286793148
            1286793269
    
    Und einer ID
    Code:
            8492
            8493
            8494
            8495
            8496
            8497
            8498
            8499
            8500
            8501
            8502
            8503
            8504
            8505
            8506
            8507
            8508
            8509
            8510
            8511
            8512
            8513
            8514
            8515
            8516
            8517
            8518
            8519
            8520
            8521
    
    Nun möcht ich nur die ID mit einem bestimmten Alter erhalten um diese dann einzeln ein einen Befehl einzubinden. Also sie müssen gefiltert werden und die verbleiben Liste in einzelne Variablen geschrieben werden.

    Mir würde ja spontan einfallen die Augabe der beiden Befehle in ein Array zu packen und die dann in einer for-Schleife auszuwerten und dort dann auch den Behel mit der comment_id abzusetzen.

    Aber ich komm nicht drauf wie ich die Ausgabe in ein Array bekomme.

    Geht sowas mit der Shell überhaupt ?

    Vielen Dank für Hilfe im Voraus.
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Shell Skripte zum Auslesen von Konfig Werten - grep ?

Die Seite wird geladen...

Shell Skripte zum Auslesen von Konfig Werten - grep ? - Ähnliche Themen

  1. Artikel: Shell-Skripte - Kleine Helfer selbst gemacht

    Artikel: Shell-Skripte - Kleine Helfer selbst gemacht: Mit Shell-Skripten sind kleine Helfer schnell selbst geschrieben. Sie haben den Vorteil, dass man sich keine langen Befehlszeilen auswendig merken...
  2. Reengineering Shellskripte

    Reengineering Shellskripte: Hallo Community, ich habe ein Problem wo ich leider keine Lösung finde. Es gibt eine Liste von Shell-skripten die in unterschiedlichen...
  3. Hilfe bei Shellskripten

    Hilfe bei Shellskripten: Hallo, Eine Frage könnte sich wer bereit stellen mir bei einem shellskript Projekt zu helfen. Das ganze wäre per ICQ ? Ich möcht eigendlich...
  4. Frage zur Verwendung von egrep in shell skripten

    Frage zur Verwendung von egrep in shell skripten: Ich möchte folgende Aufgabe mit Hilfe eines Shell Skriptes, möglichst csh/tcsh erledigen und komme irgendwie nicht weiter --> ANFÄNGER :hilfe2:...
  5. Buch für Bash Shell Skripte

    Buch für Bash Shell Skripte: Hallo, fange gerade an kleine Shell-Skripte auf der Bash (mit den bekannten Tools, grep, cut, sed,...etc) zu schreiben. Könnt Ihr mir einen...