Hilfe bei sed

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    folgendes möchte ich in meinem script aufrufen:
    gpspipe -w -n 30 | grep -m 1 lat

    ergebnis ist dann als ausgabe:
    {"class":"TPV","tag":"GLL","device":"/dev/ttyAMA0","mode":3,"time":"2015-03-21T16:35:13.000Z","ept":0.005,"lat":11.551017500,"lon":23.181613500,"alt":57.900,"epx":12.287,"epy":11.143,"epv":46.597,"track":0.0000,"speed":0.178,"climb":0.000,"eps":24.57}

    nun möchte ich, wahrscheinlich gehts nur mit sed, nur "lat" und "lon" beziehungsweise nur noch die werte von lat und lon haben.

    hat jemand eine idee wie ich das hinbekomme? ich bin ein absoluter sed depp!

    in weiteren schritten möchte ich dann einen googlemaps link daraus basteln, um mir den standort anzeigen zu lassen.

    wäre super dankbar, wenn mir jemand helfen könnte.

  • Hallo,

    du könntest das ganze noch durch awk und cut jagen:

    Code
    | awk -F 'lon":' '{print $2}' | cut -d ',' -f1
  • Sieht die Zeile immer so aus? Also hat die Zeile immer die selbe Länge?

    Du könntest anhand des Kommas mithilfe von cat oder awk die Zeile zerstückeln und dir bestimmte Parameter raus ziehen. Beispiel:

    Code
    LIST='{"class":"TPV","tag":"GLL","device":"/dev/ttyAMA0","mode":3,"time":"2015-03-21T16:35:13.000Z","ept":0.005,"lat":11.551017500,"lon":23.181613500,"alt":57.900,"epx":12.287,"epy":11.143,"epv":46.597,"track":0.0000,"speed":0.178,"climb":0.000,"eps":24.57}'
    
    
    echo $LIST | cut -d',' -f7
    
    
    echo $LIST | awk -F',' {'print $7'}

    Die Rückgabe kann dann anhand des Doppelpunkts ebenfalls noch mal zerlegt werden um nur den Wert zu erhalten...

  • Oder wieder das altbewährte grep -o in Kombination mit einem Regulären Ausdruck:

    Code
    | grep -o lat\":[0-9]*.[0-9]* | cut -d\: -f2
    Code
    | grep -o lon\":[0-9]*.[0-9]* | cut -d\: -f2

    EDIT: Kleine Korrektur. Danke @julian92

    DON'T PANIC!

    Einmal editiert, zuletzt von joh.raspi (21. März 2015 um 19:09)

  • also ich habe das jetzt mal mit julian92 tip gemacht und das ergebnis sieht jetzt erstmal so aus:

    gpspipe -w -n 30 | grep -m 1 lat >roh.txt && cat roh.txt | awk -F 'lon":' '{print $2}' | cut -d ',' -f1 >Standort.txt && cat roh.txt | awk -F 'lat":' '{print $2}' | cut -d ',' -f1 >>Standort.txt && cat Standort.txt

    nun habe ich beide werte in zwei zeilen.

    kann man das nun noch so hinbasteln, dass die werte komma getrennt in einer zeile stehen?

  • Warum leitest du das in roh.txt und nochmal in Standort.txt um :s Das Umleiten und wieder rausholen is doch viel zu umständlich...
    Setz die Werte erstmal in Variablen und lass es dann sonst wo speichern..

    Code
    AUSGABE=$(gpspipe -w -n 30 | grep -m 1 lat)
    VAR1=$(echo $AUSGABE | awk -F'lon":' {'print $2'} | cut -d',' -f1)
    VAR2=$(echo $AUSGABE | awk -F'lat":' {'print $2'} | cut -d',' -f1)
    
    
    echo $VAR1,$VAR2 > Standort.txt

    Alternativ mit den von joh.raspi erwähnten Befehls:

    Code
    echo $AUSGABE | grep -o 'lon":[0-9]*.[0-9]*' | cut -d: -f2
    echo $AUSGABE | grep -o 'lat":[0-9]*.[0-9]*' | cut -d: -f2

  • Oder wieder das altbewährte grep -o in Kombination mit einem Regulären Ausdruck:

    Da fehlt noch was unscheinbares vor dem Doppelpunkt:

    Code
    grep -o lat.:[0-9]*.[0-9]* | cut -d\: -f2
  • Ach, ich Depp hab den String zum testen mit echo in eine Datei geschrieben und dabei dummerweise doppelte anstatt einfache Quotes verwendet. Dabei sind die doppelten Quotes im Teststring natürlich flöten gegangen. :blush:

    Aber Danke für die Korrektur! :thumbs1:

    Ich hät jetzt den Anführungsstrich escaped: :)

    Code
    grep -o lat\":[0-9]*.[0-9]* | cut -d\: -f2

    Grüße,
    Joh

    DON'T PANIC!

Jetzt mitmachen!

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