Hilfe bei sed/grep
-
- Beiträge: 4
- Registriert: 28.08.2015 10:03:24
Hilfe bei sed/grep
Hallöchen alle miteinander,
ich habe eine kleine Frage und vermute die Antwort ist eigentlich relativ einfach, aber ich konnte nirgendwo etwas dazu finden...
Und zwar möchte ich nach der Installation von TeamSpeak den Token aus der log-Datei in eine andere Datei kopieren.
Auf meiner Suche nach der Lösung bin ich schon über sed, grep etc. gestolpert, nur bei allen kopiere ich immer die ganze Zeile!
Ich möchte aber, dass alles, was vor dem "token=" steht, nicht übernommen wird und alles, was in der nächsten Zeile danach kommt ebenfalls nicht.
Hat da jemand eine Idee?
ich habe eine kleine Frage und vermute die Antwort ist eigentlich relativ einfach, aber ich konnte nirgendwo etwas dazu finden...
Und zwar möchte ich nach der Installation von TeamSpeak den Token aus der log-Datei in eine andere Datei kopieren.
Auf meiner Suche nach der Lösung bin ich schon über sed, grep etc. gestolpert, nur bei allen kopiere ich immer die ganze Zeile!
Ich möchte aber, dass alles, was vor dem "token=" steht, nicht übernommen wird und alles, was in der nächsten Zeile danach kommt ebenfalls nicht.
Hat da jemand eine Idee?
- whisper
- Beiträge: 3377
- Registriert: 23.09.2002 14:32:21
- Lizenz eigener Beiträge: GNU Free Documentation License
-
Kontaktdaten:
Re: Hilfe bei sed/grep
Aus der Hüfte geschossen:
Das wird schonmal in die richtige Richtung gehen.
Code: Alles auswählen
grep 'token=' logdatei | cut -d= -f2
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt.
-
- Beiträge: 4
- Registriert: 28.08.2015 10:03:24
Re: Hilfe bei sed/grep
Das hat perfekt funktioniert, vielen Dank
Re: Hilfe bei sed/grep
Dabei entsprach die Lösung gar nicht ganz deinen Anforderungen. Es wären Logzeilen denkbar, die zu falschen Ausgaben geführt hätten.Permittivity hat geschrieben:Das hat perfekt funktioniert, vielen Dank
Hier mal eine Lösung per awk:
Code: Alles auswählen
awk -F"token=" '{print $2}' logdatei
Re: Hilfe bei sed/grep
Und der Vollstaendigkeit halber, in sed wuerde man das beispielsweise so loesen:Erklaerung: das erste /token=/ filtert nur auf Zeilen, die tatsaelich token= enthalten. Das macht die Sache schneller, weil substitute (s///) relativ teuer ist und andernfalls fuer jede (nicht zutreffende) Zeile bemueht werden muesste.
Die RegEx im s/// macht auf "beliebig oft irgendwas, dann "token=" und dann als Gruppe beliebig oft irgendwas. Letztendlich ist die komplette Zeile gematcht, die ich per Backreferenz \1 durch die Gruppe, d.h. alles hinter token=, ersetze. Sofern die Ersetzung erfolgreich war, wird per p wie print die aktuelle Zeile ausgegeben. Dies waere das Standardverhalten, das ich per -n unterdruecke.
Gruss Cae
Code: Alles auswählen
$ sed -n '/token=/s/.*token=\(.*\)/\1/p' data
Die RegEx im s/// macht auf "beliebig oft irgendwas, dann "token=" und dann als Gruppe beliebig oft irgendwas. Letztendlich ist die komplette Zeile gematcht, die ich per Backreferenz \1 durch die Gruppe, d.h. alles hinter token=, ersetze. Sofern die Ersetzung erfolgreich war, wird per p wie print die aktuelle Zeile ausgegeben. Dies waere das Standardverhalten, das ich per -n unterdruecke.
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
-
- Beiträge: 4
- Registriert: 28.08.2015 10:03:24
Re: Hilfe bei sed/grep
Is zwar schön, dass ihr nocha ndere Lösungsvorschläge anbringt, aber der von whisper hat genau das gemacht, was ich wollte: den Token rausgefiltert.
Zudem ist seine Variante auch die einfachste
Zudem ist seine Variante auch die einfachste
Re: Hilfe bei sed/grep
Das stimmt vielleicht. Es ist nur die Frage, ob du (und andere Leser) nur ein Problem gelöst haben wollten oder auch etwas dabei lernen wollten. Im übrigen finde ich diese elementaren textbasierten Befehle weit wichtiger als irgendwelche GUI-Fragen. Auch in Jahrzehnten werden nämlich die Befehle weiter funktionieren wenn sich die GUI schon 1000 Mal geändert hat. Du brauchst die Befehle nur einmal im Leben lernen. Am besten heute damit es sich auch lohnt.
Re: Hilfe bei sed/grep
Und deswegen geht sie auch am einfachsten kaputtPermittivity hat geschrieben:Zudem ist seine Variante auch die einfachste
Code: Alles auswählen
$ cat data
login=foo token='bar baz' key=value
$ grep token= data | cut -d= -f2
foo token
$ awk -Ftoken= '{print$2}' data
'bar baz' key=value
$ sed -n '/token=/s/.*token=\(.*\)/\1/p' data
'bar baz' key=value
$
Man darf sich aber immer die Frage stellen, ob man mit entsprechend unerwarteten Eingangsdaten zurechtkommen muss. Imho ist das bei manueller Verarbeitung nicht unbedingt wichtig, da reicht "mal eben hingeklatscht", weil unplausible Ergebnisse sofort auffallen. Sobald die Funktion automatisiert und damit unbeobachtet laufen soll, ist imho unbedingt auf sauberes Verarbeiten zu achten, weil man sich sonst (Jahre spaeter) beim Debuggen einen Wolf sucht. Ich spreche aus Erfahrung, zwei Minuten sauberes Arbeiten ist spassiger als eine Stunde "das kann doch gar nicht sein"-Debugging in den Tiefen irgendwelcher Shellskripte.
Gruss Cae
Zuletzt geändert von Cae am 31.08.2015 15:00:29, insgesamt 1-mal geändert.
Grund: edit wegen greedy .*
Grund: edit wegen greedy .*
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
Re: Hilfe bei sed/grep
War mir natürlich bekannt und hatte ich kurz angedeutet. Die Option -F ohne Anführungszeichen finde ich im übrigen etwas unleserlich.(unames Variante bricht auch, sobald der Token durch einen doofen Zufall selbst nochmal token= enthaelt)