property-file per skript prüfen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von electren, 08.08.2006.

  1. #1 electren, 08.08.2006
    electren

    electren Jungspund

    Dabei seit:
    03.06.2006
    Beiträge:
    21
    Zustimmungen:
    0
    Hallo...
    ich hab folgendes property-file
    Code:
    <!-- yyy-->
    	integration=yyy.xxxx.de
    	integration_user=bbb
    	integration_password=ccc
    	integration_dir=....
    	integration_chmod=775
    
    <!-- zzz-->
    	wartung=zzz.xxx.de
    	wartung_user=bbb
    	wartung_password=ccc
    	wartung_dir=...
    	wartung_chmod=775
    
    Außerdem steht in dem File eine Variable
    hostlist=integration,wartung

    Die properties werden für ein ANT-Skript verwendet, in welchem es eine for-Schleife gibt, die nacheinander die Host abarbeitet.
    Die Schleife verwendet die hostlist als list...

    Jetzt würde ich gerne in dem shell-skript welches das ANT aufruft, am Anfang so eine Art Update einbaut, welches das File durchgeht, und z.b. nach "<!--" sucht, eine Zeile tiefer sich den String vor "=" ruassucht und das dann in hostlist schreibt....

    Ich denk mit sed bin ich da gut bedient... oder?

    Hat jemand ne Idee?

    Grüße ele
     
  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. #2 Xanti, 08.08.2006
    Zuletzt bearbeitet: 08.08.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Kann es auch perl sein?

    Schnellschuss:

    Code:
    [~]$ hostlist=($(perl -0\777 -ne 'print join " ",/<.*?>\n.*?=(.*?)\n/g' property-file))
    [~]$ echo ${hostlist[0]}
    yyy.xxxx.de
    [~]$ echo ${hostlist[1]} 
    zzz.xxx.de
    
    edit: Kleine Verbesserung.
     
  4. #3 Wolfgang, 08.08.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Also wenn du wirklich vor = meinst, dann erschließt sich mir der Sinn nicht wirklich.
    Aber das geht auch mit sed:
    Code:
    $ sed -ne '/</{N;s/.*\n\([^=]*\)=.*/\1/g;p}' testdatei
    integration
    wartung
    
    
    Meinst du den ersten Wert also nach =
    Code:
    $ sed -ne '/</{N;s/.*\n[^=]*=\(.*\)/\1/g;p}' testdatei
    yyy.xxxx.de
    zzz.xxx.de
    
    Gruß Wolfgang
     
  5. #4 electren, 08.08.2006
    electren

    electren Jungspund

    Dabei seit:
    03.06.2006
    Beiträge:
    21
    Zustimmungen:
    0
    Vielen Dank für die Antwort.

    Ich meine tatsächlich den Wert vor dem "="...#

    Leider versteh ich das sed - command nich mal annähernd :think:

    Für was steht das $ zu Beginn?
    das verursacht nämlich: command not found..

    Lass ich es weg: sed: command garbled: /</{N;s/.*\n\([^=]*\)=.*/\1/g;p}

    ?(
     
  6. #5 Xanti, 08.08.2006
    Zuletzt bearbeitet: 08.08.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Das $ steht für das shell-Prompt. Also nicht mittippen ;)

    Welches sed nutzt Du? Welches OS?

    edit: Falls sed nicht funzt, hier nochmal die angepasste perl-Lösung:

    Code:
    perl -0\777 -ne 'print join " ", /<.*?>.*?(\w*?)=/gs' property-file
    
     
  7. #6 electren, 08.08.2006
    Zuletzt bearbeitet: 08.08.2006
    electren

    electren Jungspund

    Dabei seit:
    03.06.2006
    Beiträge:
    21
    Zustimmungen:
    0
    OS is SunOS 5.9

    Welches sed - kann ich dir nicht sagen..

    EDIT:
    das perl macht leider garnix....

    Was sollte es denn machen?
     
  8. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Sorry, hatte /s vergessen. Versuch es nochmal:

    Code:
    [~]$ hostlist=($(perl -0\777 -ne 'print join " ",/<.*?>.*?(\w*?)=/gs' property-file))
    [~]$ echo ${hostlist[0]}
    integration
    [~]$ echo ${hostlist[1]}
    wartung
    
    Es sollte theoretisch die Liste liefern.
     
  9. #8 Wolfgang, 08.08.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Wenn du das mit sed nicht hinbekommst, ist am portabelsten die version mit -f<SCRIPTFILE>
    Sprich schreib folgendes in eine Datei:

    Benenn die Datei wie du willst.
    Ich nenn sie sed_script
    Code:
    sed -nfsed_script inputdatei >>liste
    Falls es dann Fehler gibt, entferne die Semikola, da du vermutlich kein GNU sed hast.
    Für Perl habe ich auch noch eine Variante auf Lager ;)
    Code:
    perl -0\074 -ne 'print "$1\n" if /.*?\n(.*?)=/sg' eingabedatei >>ausgabedatei
    
    ;)

    Gruß Wolfgang
     
  10. #9 electren, 08.08.2006
    electren

    electren Jungspund

    Dabei seit:
    03.06.2006
    Beiträge:
    21
    Zustimmungen:
    0
    ahh - ok..
    du suchst dir das 1. "=" und schreibst den Wert davor in ${hostlist}.

    Lässt du dann immer die nächsten 4 "=" aus.. ??

    Gemeint hatte ich es anderst:

    Am Anfang stehen noch viele andere properties - d.h.
    Ich hab Werte in der Liste die ich nich will.
    Die einzigste Möglichkeit ist, die Stellen abzusuchen, wo die Namen der Hosts stehen, also: Suche <!--xxx--> und von da aus dann (eine Zeile runter - dort suche "=") und was davor steht is der Wert.

    Das mit der hostlist - is ein property in dem property-file... d.h.
    da steht am Anfang: hostlist=integration,wartung,test

    So speichert er es ja in ein Variablen-Array... aber ich denke, es von da in das file zu bekommen, in die Liste - is nicht so das Problem....
     
  11. #10 Wolfgang, 08.08.2006
    Zuletzt bearbeitet: 08.08.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Sorry, aber so wird das nix.
    Wenn du Probleme hast deine Aufgabe richtig zu beschreiben, dann hilft es oft weiter, Beipieldaten und das erwartete Ergebnis zu posten.

    Wie soll hier jemand sonst wissen, welche Werte du willst und welche nicht.
    Ich habe mich präzise an deine geschilderte Aufgabe gehalten.

    Also welche Werte willst du nun wirklich?
    Wie du die Ausgabe in eine Datei umleitest, habe ich bereits geschildert.

    Gruß Wolfgang
    PS Die Lösung einer Aufgabe beginnt beim analysieren!

    Edit:
    Um z.B. nur die erste Zeile nach einem <!-- zzz ---> auszuwerten, folgendes im File sedscript:

    dann halt wieder :
    Code:
    sed -nfsedscript eingabedatei >liste
    
     
  12. #11 Xanti, 08.08.2006
    Zuletzt bearbeitet: 08.08.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Bei meinem Befehl wird das property-file als ein langer String betrachtet (bei Wolfgang ebenfalls). In diesem String werden alle Vorkommen des folgenden Musters gesucht:

    Code:
    <beliebige Zeichen>beliebige Nicht-Wort-Zeichen(Wort-Zeichen)=
    und der in den Klammern () vorhandene String wird ausgegeben. Das join " ".. bewirkt ein Leerzeichen zwischen den gefundenen Wörtern. Durch ($()) wird die ausgebene Liste im Bash-Array ${hostlist[*]} gespeichert, da ich annahm, dass Du die Liste so willst.

    Leider werd ich nicht so richtig schlau, was genau Du mit der Liste anfangen willst. Also besser nochmal erklären :)

    edit: Muss Wolfgang beipflichten, Deine Aufgabenstellung ist etwas konfus...
     
  13. #12 electren, 08.08.2006
    Zuletzt bearbeitet: 08.08.2006
    electren

    electren Jungspund

    Dabei seit:
    03.06.2006
    Beiträge:
    21
    Zustimmungen:
    0
    ok.. sorry..
    du hast recht..

    ganz oben war noch ein <!-- welches die Überschrift umgiebt...

    Vielen Dank für eure Hilfe!!!!!!

    Wegen der hostlist - hab ich mich wohl ncih deutlich ausgedrückt...

    Ich hatte eigentlich vor die Property-Datei zu bearbeiten...

    also das property hostlist würde jetzt so aussehn:
    hostlist=integration,wartung,test
    da ich noch die Daten der Testmaschine eingeschrieben hab....

    quasi:
    hostlist=${hostlist[0]},${hostlist[1]},${hostlist[2]}

    Vielen Dank und nen schönen Abend ... grüße
    ele


    EDIT:
    Nicht nur meine Aufgabenstellung ist konfus :-))

    Ich schreib das komplette property-file so um - dass ich es verööfentlichen kann...
    Vielleicht wird es dann klarer...
    es is schon spät... langer Tag gehabt... habt Nachsehn.. :-))
     
  14. #13 Wolfgang, 08.08.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hier noch der angepasste Perl-einzeiler.
    Code:
    perl -0\074 -ne 'print "$1\n" if /-- zzz.*?\n(.*?)=/sg' eingabedatei >>liste
    
    Das schreibt bei deinen vorgegebenen daen wartung in die Datei liste.
    Der Inputseperator ($/) wird bei mir auf oktal 74 gesetzt, was dem Zeichen < entspricht.
    Dann suche ich nach dem ersten Wert vor einem = nach der Zeile mit <!-- zzz
    , wobei im Puffer die Zeile dann mit !-- zzz --> beginnt.

    Der Wert ist dann folglich Wartung.
    Falls gewünscht, erklär ich auch das Sedscript.

    Gruß Wolfgang
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 electren, 08.08.2006
    electren

    electren Jungspund

    Dabei seit:
    03.06.2006
    Beiträge:
    21
    Zustimmungen:
    0
    Code:
    ================================================================
          THIS IS THE CONFIGURATION FILE FOR THE BEST SYNCHRO-TOOL :-)
    
    
     lokale Properties
    	output: Hier liegen die Dateien die ausgeliefert werden.
    	hostlist: Hier die hosts hinzufügen auf welche verteilt werdden soll.
    
    	output=output
    	hostlist=integration,wartung
    	hostname=host
    	
    <!-- xxx -->
    	integration=xxx.blubber.de
    	integration_user=user
    	integration_password=pwd
    	integration_dir=/prog/prog/temp/electren
    	integration_chmod=775
    
    <!-- zzz -->
    	wartung=zzz.blubber.de
    	wartung_user=user
    	wartung_password=pwd
    	wartung_dir=/prog/prog/tmp/electren
    	wartung_chmod=775
    	
    <!-- testefix -->
    	test=zzz.blubber.de
    	test_user=user
    	test_password=pwd
    	test_dir=/prog/prog/tmp/electren
    	test_chmod=775
    Jetzt müsste das SKript quasi merken das es noch die testefix gibt - die aber nicht oben in der hostlist steht... und sie da dann rein schreiben...

    :))
     
  17. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Mein Vorschlag:

    Code:
    perl -0\777 -pi -e 's!hostlist=.*?\n!"hostlist=".(join ",", /<.*?>.*?(\w*?)=/sg)."\n"!se' property-file
    
    Gruss, Xanti
     
Thema:

property-file per skript prüfen

Die Seite wird geladen...

property-file per skript prüfen - Ähnliche Themen

  1. Kontextmenü mit einem Skript verbinden

    Kontextmenü mit einem Skript verbinden: Abend, wenn ich z. B. eine simple Umwandlung eines Bildformates in ein anderes über das KDE-Kontextmenü (Servicemenü nennt es sich im KDE oder...
  2. [Erledigt] Shell-Skript lässt sich nicht mit Cron ausführen

    [Erledigt] Shell-Skript lässt sich nicht mit Cron ausführen: Hallo, ich hoffe ihr könnt mir helfen. Ich entwerfe im Moment ein Skript, welches den Callmonitor (Telnet) auf meiner FritzBox abfragt und wenn...
  3. Kunden-Skript ausgelöst durch Linux-Cluster Pacemaker

    Kunden-Skript ausgelöst durch Linux-Cluster Pacemaker: Hallo! Ich komme aus der AIX-Welt wo es im HACMP-Cluster die Möglichkeit der Ausführung eines Start- bzw. Stop-Skriptes im Zuge einer...
  4. Shell-Skript Datum in einer Datai suchen

    Shell-Skript Datum in einer Datai suchen: Hallo zusammen Ich komm eigentlich aus der Klicki-Bunti-Welt von Windows. Seit geraumer Zeit versuche ich meine Künste mit verschiedenen...
  5. Nmap 7.10 mit zahlreichen neuen Skripten und Fingerabdrücken

    Nmap 7.10 mit zahlreichen neuen Skripten und Fingerabdrücken: Der Nmap-Entwickler Gordon »Fyodor« Lyon hat bekannt gegeben, dass eine neue Version des populären, freien Netzwerkscanners veröffentlicht wurde....