FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: dmq am 21 Dezember 2016, 21:08:46

Titel: FileLog Regex mit Whitespace
Beitrag von: dmq am 21 Dezember 2016, 21:08:46
Hallo,

ich komme gerade seit zu viel Zeit nicht mit einer Regex weiter :)

Ich möchte in ein FileLog nur mit einer speziellen Endung schreiben.

Beispiel:

bla.bla 100 bla

Hierzu habe ich eine FileLog-Definition:

define bla.bla.filelog FileLog ./log/bla.txt .*bla

Dies greift natürlich. Leider greift aber auch ein "bla.bla 100 bla-bla". Ich würde halt gerne eine RegEx erstellen, die nur " bla" als mit vorangestellten whitespace greift und nicht mit Bindestrich "-".

define bla.bla.filelog FileLog ./log/bla.txt .*\ bla

müsste meines Erachtens funktioniert. Tuts aber leider nicht:

wrong syntax: define <name> FileLog filename regexp [readonly]

Kann mir hier ggf. jemand weiterhelfen?

Lieben Dank vorab
dmq
Titel: Antw:FileLog Regex mit Whitespace
Beitrag von: Markus Bloch am 21 Dezember 2016, 21:12:09
versuchs mal so:

define bla.bla.filelog FileLog ./log/bla.txt .*\sbla

\s steht für ein "Whitespace"-Zeichen (nicht sichtbare Zeichen wie Leerzeichen, Tabulator, Zeilenumbruch,...)

Gruß
Markus
Titel: Antw:FileLog Regex mit Whitespace
Beitrag von: dmq am 21 Dezember 2016, 21:31:28
Hi Markus,

besten Dank, funktioniert. Ich hätte mir mal besser die Perl-Syntax angeguckt :)

Danke für die schnelle und funktionale Antwort,

dmq
Titel: Antw:FileLog Regex mit Whitespace
Beitrag von: BeetleX am 01 Februar 2017, 21:56:47
... meine Lernkurve ist gerade eher sinusförmig ...
Ich möchte im Log Zeilen zusammenstreichen, also hieraus einzelne Zeilen fischen:

MAXT_.* erzeugt
2017-02-01_21:23:45 MAXT_TUER1 battery: ok
2017-02-01_21:23:45 MAXT_TUER1 onoff: 0
2017-02-01_21:23:45 MAXT_TUER1 closed


MAXT_[A-Z0-9]*.closed bringt

2017-02-01_21:23:45 MAXT_TUER1 closed


aber

MAXT_[A-Z0-9]*.onoff 

findet nichts - ???

Könnte jemand einen Tipp geben?
Holger
Titel: Antw:FileLog Regex mit Whitespace
Beitrag von: Markus Bloch am 01 Februar 2017, 22:25:56
Nach onoff kommt ja auch noch mehr. Das berücksichtigt aber deine regexp nicht. Füge daher .* nochmal am Ende an.

Zum Thema Lernkurve. Sinus ist doch nicht schlecht. Da geht's immer wieder Berg auf. Tangens ist viel schlimmer  ;)
Titel: Antw:FileLog Regex mit Whitespace
Beitrag von: BeetleX am 02 Februar 2017, 20:46:37
Hallo Markus,
Danke für den Tipp, jetzt hab ich auch den Aha-Effekt gehabt, was eigentlich passiert  ->sin(90)==1  :)

Aber einen Schritt weiter bin ich wieder in der Wüste:
MAXT_.*onoff.* funktioniert also, aber
MAXT_.*\sonoff.* nicht.
MAXT_.*\x20onoff.*  auch  nicht
MAXT_TUER1\sonoff.* auch nicht
-> sin(270)==-1  >:(

Das bla-Demo oben sieht doch einfach aus, oder?
VG Holger
Titel: Antw:FileLog Regex mit Whitespace
Beitrag von: Markus Bloch am 03 Februar 2017, 16:10:44
Hallo Holger,

das hat folgenden (einfachen) Grund.

Event-Regexp's müssen auf folgendes Schema passen: <NAME>:<EVENT>

In deinem konkreten Beispiel haben <NAME> und <EVENT> folgende Inhalte:

<NAME> = "MAXT_TUER1"
<EVENT> = "onoff: 0"

Deine Regexp muss also auf folgende Zeichenkette passen: "MAXT_TUER1:onoff: 0"

Im Event-Monitor wird <NAME> und <EVENT> mit einem Leerzeichen getrennt, der Optik/Übersichtlichkeit wegen.

Daher funktionieren folgende Abwandlungen:


MAXT_.*onoff.*
MAXT_.*:onoff.*
MAXT_.*:onoff:\s.*
MAXT_.*:onoff:\s\d+
MAXT_TUER1:onoff.*


Ich hoffe jetzt ist die Lernkurve wieder bei sin(90) angekommen ;)

Gruß
Markus
Titel: Antw:FileLog Regex mit Whitespace
Beitrag von: BeetleX am 03 Februar 2017, 17:32:08
Hallo Markus,

OK, OK, das erklärt natürlich mein vergebliches Mühen!

Danke und VG Holger  :)