FileLog Regex mit Whitespace

Begonnen von dmq, 21 Dezember 2016, 21:08:46

Vorheriges Thema - Nächstes Thema

dmq

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

Markus Bloch

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
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

dmq

Hi Markus,

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

Danke für die schnelle und funktionale Antwort,

dmq

BeetleX

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

Markus Bloch

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  ;)
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

BeetleX

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

Markus Bloch

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
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

BeetleX

Hallo Markus,

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

Danke und VG Holger  :)