Shell-Ausgabe nach "wort" durchsuchen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo geehrtes Forum!

    Bin leider noch absuluter Linux Neuling und komm bei folgendem Versuch nicht weiter:


    Mit folgendem Befehl kann ich den Status von meiner Squeezebox per Terminal abrufen:

    pylms -s 10.0.0.14 -i

    Ausgabe sieht dann so aus:

    INFO: Server Version: 7.7.2
    INFO: Player: 11:22:33:44:55:66 | SqueezeLite 2 | V: 59 | M: stop | T: 0.0 | C: True | W: 0
    INFO: Player: 22:33:44:55:66:77 | SqueezeLite | V: 50 | M: play | T: 168.608638279 | C: True | W: 0
    WARNING: No arguments provided


    Nun möchte ich dies per sh Skript ausführen um einen Gpio zu steuern: (ich versuchs mal zu erklären :-D)


    player mac: 11:22:33:44:55:66

    if "pylms -s 10.0.0.14 -i" (nur die zeile in der die oben definierte mac vorkommt auf "play" durchsuchen)
    then
    "befehl1"
    else
    "befahl2"
    fi

    Befehle zur Gpio Steuerung sind mir bekannnt, geht mir rein um das prüfen des strings.
    Hab im Web einiges über "grep" gefunden, aber leider bekomm ichs nicht hin^^


    Hoffe jemand kann mir helfen! :)

    Danke! Hannes

  • ich würde es so machen:

    Keep it simple [,&] stupid

  • Danke für die raschen Antworten!

    Hab mir jetzt folgendes zusammengebastetl:

    Shairport und MPD schlten auch brav, aber wenn ich per Squeezelite was spiele tut sich nix.
    Die ausgabe von pylms funktioniert, also muss im Code noch was falsch sein...

    Hoffe jemand kann kurz drüberschaun! :)

    danke!!

  • wie kann ich mir die Ausgabe anzeigen lassen?
    oder einfach ins teminal

    pylms -s 10.0.0.14 -i | grep 11:22:33:44:55:66

    schreiben?

    da bekomm ich die selbe ausgabe wie ohne dem grep teil, also alle player (siehe 1.post)

  • im terminal ist schon richtig.


    Aber wieso alle Player??

    Es sollte eigentlich nur eine Zeile sein.
    Also etwa so

    INFO: Player: 11:22:33:44:55:66 | SqueezeLite 2 | V: 59 | M: stop | T: 0.0 | C: True | W: 0

    wenn 11:22:33:44:55:66 der gesuchte MAC ist.

    Keep it simple [,&] stupid

  • hm, eigenartig^^

    gibt immer alle Zeilen ungefiltert aus... auch wenn ich das ganze skript starte seh ich ca. jede Sek.
    alles Zeilen im Terminal.

    Kenn mich leider mit grep überhaupt nicht aus.


    Danke!

    Auch so funktionierts leider nicht...


    audio=`pylms -s 10.0.0.14 -i`

    if [[ $audio =~ ^.*11:22:33:44:55:66.*play.*$ ]]
    then
    SQUEEZELITE_STATE=1

    else
    SQUEEZELITE_STATE=0
    fi

    Einmal editiert, zuletzt von hannes_os (14. November 2013 um 16:29)

  • man kann mit grep zwar komplizierte Sachen machen. Aber das Grundsätzliche ist ganz einfach.
    Es werden halt Zeilen mit dem Suchstring herausgefiltert und nur diese angezeigt.

    teste mal:

    Code
    IFS='
    '
    pylms -s 10.0.0.14 -i | grep 11:22:33:44:55:66



    Hinter IFS=' darf nichts stehen, auch kein Leerzeichen!

    Keep it simple [,&] stupid

  • Gibt auch alles aus, wie im 1. post^^

    Gefühlt hab ich schon alles versucht, aber kein hauch von erflog...

    Kann das ganze jemand auf anderem Weg lösen? (SED??)

    danke nochmal! :)

  • awk ist eher weiteres Programm, dass du nehmen kannst.
    Aber awk reicht für eine ganze Semestervorlesung


    edit:

    erst jetzt gesehen

    Die beiden Zeilen mit IFS müssen genauso stehen wie in meinem Beispiel: OHNE Einrückung

    Keep it simple [,&] stupid

    Einmal editiert, zuletzt von kungel (14. November 2013 um 18:02)

  • na ja, in das Script umleiten wäre schlecht. Dann hättest du beim nächsten Aufrufen des Scripts tausend Fehlermeldungen.

    Aber eigentlich ist es durch die Pipe ("|") schon umgeleitet. Warum die Ausgabe trotzdem noch erfolgt, kann ich dir nicht sagen.
    Gibt es für das Programm Parameter um die Ausgabe zu steuern?

    Ansonsten kann man mit >/dev/null alles ins Nirwana schicken.

    Oder mit >/pfad/dateiname alles in eine Datei schreiben und dann

    echo /pfad/dateiname | grep ...

    ausprobieren.

    Für heute abend Tschüß

    Keep it simple [,&] stupid

  • So, ein Freund von mir konnte mir weiterhelfen! :)

    Die Ausgabe von pylms konnten wir leider auch weiterhin nicht verwerten (auch nicht in eine .txt weiterleiten, daher lassen wir pylms nun
    die log in eine .txt schreiben weche wir dann per grep filtern.

    Danke an alle für die Mühe!

    Hannes

  • Das:

    Code
    cat /root/squeeze.txt | grep "$MAC" | grep -c "play"

    Kannst du effektiver so nutzen:

    Code
    grep "$MAC" /root/squeeze.txt | grep -c play


    Und als Tip nebenbei: Vermeide so gut es geht Anführungszeichen oben ( " " ) da bash sonst darin nach einer Variable sucht

    Code
    IFS='
    '


    Ist ebenfalls falsch, das soll vermutlich ein 'newline' bewirken? Dann wäre es: IFS=$'\n'

    Ich kenn zwar pylms nicht aber verstehe nicht wofür das Script dienen soll?

    Und:

    if [ $? -eq 0 ]

    prüft zudem ob der Rückgabewert des vorherigen Befehls einen höheren Rückgabewert als 1 hat, was aber eigentlich zum Abfragen von Errors genutzt wird (exit code > 0) ... Dh. " if [ $? -eq 0 ] " trifft zu wenn der vorherige Befehl erfolgreich ausgeführt wurde

  • Die beiden Zeilen mit IFS bedeuten newline, kann man auch anders, ist aber piep-egal wie man es schreibt.


    grep liefert einen Fehler zurück, wenn nichts gefunden wird.
    Einfach mal ausprobieren!

    Also nichts falsch. also bei mir

    Keep it simple [,&] stupid

  • Neee, wenn nichts gefunden wird kommt garnichts, kein Fehler aber eben auch keine Rückgabe:

    Code
    root@test ~ > grep bla /var/log/syslog
    root@test ~ > 
    
    
    root@test ~ > grep bla /var/log/syslog | grep -c play
    0
    root@test ~ >

  • ...Und als Tip nebenbei: Vermeide so gut es geht Anführungszeichen oben ( " " ) da bash sonst darin nach einer Variable sucht...


    Diese Aussage verwundert mich sehr. Was meinst Du damit genau? Good practice für bash ist alle benutzen Variablen in Tests in " einzurahmen um die leidige LeerzeichenSyntaxErrorProblematik zu umgehen.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!