Du kennst dich mit Regex aus?
Ich nämlich nicht
, d.h. von meiner Seite aus bräuchte ich das erst gar nicht auf die ToDo-Liste schreiben. Aber wenn du mich da konstruktiv unterstützen möchtest, bist du herzlich eingeladen
Hi geimist,
ist schon ein bischen her, aber in meinen "aktiveren Entwicklerzeiten" habe ich mich auch mit RegEx beschäftigt. Ist nicht so schwierig wie es auf den ersten Blick aussieht. Allerdings habe ich keine Ahnung von Linux Shell.
Soweit ich Dein Script aber lesen kann, vermute ich, dass Du "einfach" wie bei der Datumssuche vorgehen könntest. Da verwendest Du ja bereits Reguläre Ausdrücke. z.B. in Zeile 331:
founddate=$( parseRegex "$content" "([1-9]|[1-2][0-9]|3[0-1])[\./-][0-1]?[0-9][\./-](19[0-9]{2}|20[0-9]{2}|[0-9]{2})" | head -n1 )
Wenn Du die RegExpression "([1-9]|[1-2][0-9]|3[0-1])[\./-][0-1]?[0-9][\./-](19[0-9]{2}|20[0-9]{2}|[0-9]{2})" in Deinem UI als Variable entgegennimmst, kann der Anwender damit selbst definieren, wie er $content, bzw. wohl eher das $searchfile durchsuchen will.
Komfortabeler wird es, wenn Du die Regulären Ausdrücke so wie jetzt die Tags "einsammelst" und in ein Array überführst - so wie Du es bereits ab Zeile 289 für die Tags tust. Dann könnte der Anwender für jedes Suchwort / Set an Suchbegriffen / Suche einen eigenen Regulären Ausdruck definieren.
statt
grep -qi "${searchtag}" "$searchfile"
würdest Du dann vermutlich etwas in der Art
foundtag=$( parseRegEx "$searchfile" "${userRegExpression}" )
aufrufen und prüfen, ob "foundtag" den gewünschten Wert gefunden hat.
Noch mehr Komfort wäre, wenn jemand (ich? *schluck*) die Regulären Ausdrücke zuliefern würde, die meine gewünschten Features implementieren und Dein Skript wieder nur die Tags dort "hinein wirft". Hier kann ich aber nichts versprechen. Zeit ist leider und wie immer ein knappes Gut.
Für die Datumssuche würde ich ähnlich vorgehen und die Regulären Ausdrücke durchaus vorgeben, aber durch den Nutzer veränderbar / erweiterbar als Variablen im UI hinterlegen. So kann dann der geneigte Nutzer selbst Ausdrücke hinzufügen. Beispielsweise fehlt mir aktuell das Format "Januar 2010" (häufig von Versicherungen verwendet).
Das war jetzt nur schnell durch den Code geflipped. Daher auch bitte nicht böse sein, wenn ich die Details falsch erfasst habe. Wie gesagt: Ich hab keine Ahnung von Linux Shell.
RegExp sind ein sehr mächtiges Werkzeug, mit dem man deklarativ solche Suchen, wie von mir in den vergangenen Posts angeregt, deklarativ durchführen kann (sprich: Sehr gut geeignet für Skriptsprachen wie Linux Shell). Wenn Du Dich für Reguläre Ausdrücke interessierst, kann ich folgende Seite empfehlen:
https://www.regular-expressions.info/
Grüße,
Rampino