Forum: PC Hard- und Software Filtern mit grep auf Teilstring eines Teilstrings (Gruppe)


von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Hallo,

ich suche nach einer Möglichkeit mit grep einen Teistring zurück zu 
geben, genauer einen Teilstring eines Teilstring.

Aktuell handelt es sich um mehrere Leistungsdaten nach dem Schema (aber 
nicht Zeilenweise getrennt!):

Leistung DC1 = 123.4 W
Leistung DC2 = x.x W
Leistung DC3 = xx.x W
Leistung DC4 = xxx.x W

plus weitere Daten und ich möchte z.B. nur den Wert der Leistung DC1 
(mit Einheit) haben: 123.4 W

Aktuell mache ich es über:

grep -oE 'Leistung DC1 = [0-9]+[.][0-9] W' | grep -oE '[0-9]+[.][0-9] W'

frage mich aber ob es mit grep nicht auch in einem Statement geht.

Es ist explizit keine Lösung mit awk, sed, cut, oder sonst einem 
weiteren Tool gesucht, die kann ich mir selber zusammenreimen, es geht 
mir nur um grep.

Hatte im Prinzip auf so etwas wie match groups gehofft:
grep -oE '(Leistung DC1 = )([0-9]+[.][0-9] W)'
und gib mir nur die 2. Matchgroup.

: Bearbeitet durch User
von Rbx (rcx)


Lesenswert?

Hast du dir schon mal ripgrep angesehen?

Außerdem gehören das Pipen und die Zusatznahmen (z.B. ein Buchstabe vor 
grep) wie auch die Einbindung anderer Programme zu grep bzw. auch zur 
Unix-Philosophie.
ripgrep hilft eventuell dabei, einzugrenzen, was grep nicht kann.

von Tic T. (dingsdk)


Lesenswert?

Das könnte evtl mit perl regex und \k funktionieren.

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Tic T. schrieb:
> Das könnte evtl mit perl regex und \k funktionieren.

Jop, genau so ist es (Kleinigkeit: \K statt \k):

grep -oP 'Leistung DC1 = \K[0-9]+[.][0-9] W'

liefert genau was ich brauche. Danke!

Wobei ich dann mit perl regex auch die vereinfachte Schreibweise nutzen 
kann:

grep -oP 'Leistung DC1 = \K\d+\.\d W'

: Bearbeitet durch User
Beitrag #7784737 wurde vom Autor gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.