Filtern mit grep auf Teilstring eines Teilstrings (Gruppe)

Gast #7784611
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.

#7784620
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.

Gast #7784720
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'

Beitrag #7784737 wurde von einem Moderator gelöscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren