Wenn du dir das antun willst... genre. Ich versuch das mal zu erklären. Räusper....
Eine Suchanfrage, also nur Suchbegriff, ohne Einbeziehung von Datum und Uhrzeit wird in meinem Script so gestellt.
Code:
/bin/find "$PathOrFile" -type f -exec [COLOR="#FF0000"]grep[/COLOR] -E[COLOR="#FF0000"]H[/COLOR] '.*(.*'"${post[searchstring]}"').*' {} \; >> ${result}
Hierbei wird mittels dem grep Optionsschaler -H der Pfad inkl. Dateiname des Suchtreffers angezeigt. ${result} würde als String dann so aussehen...
Code:
/var/log/messages[COLOR="#FF0000"]:[/COLOR]2020-04-28T17:50.... bla bla bla
... wobei Pfad und Dateiname vom eigentlichen Suchtreffer durch ein Doppelpunkt getrennt ist. grep grenzt das wohl immer so ab. Über eine for-Schleife werden mir die Ergbnisse von ${result} dann zeilenweise ausgegben. Um jetzt den Pfad/Datei vom Logeintrag einer Zeile zu trennen, schneide ich den String einfach mit ${line%%:*} an der Stelle ab, wo sich der Doppelpunkt befindet so das mir in der ersten Zeile Pfad und Datei ausgegeben wird. Das aber auch nur, wenn sichergestellt ist, das die Zeile mit einem / anfängt und nicht mit einem Logeintrag beginnend mit Datum. In der nächsten Zeile wird dann mit ${line#*:} der Logeintrag ohne Pfad/Dateiname gefiltert und angezeigt.
Kann man das nachvollziehen, was ich bis jetzt geschrieben habe?
Also weiter. Füge ich dem grep jetzt die Zeilennummer mit dem Optionsschalter -n hinzu, also...
Code:
/bin/find "$PathOrFile" -type f -exec [COLOR="#FF0000"]grep[/COLOR] -E[COLOR="#FF0000"]n[/COLOR]H '.*(.*'"${post[searchstring]}"').*' {} \; >> ${result}
... dann sieht ${result} folgendermaßen aus...
Code:
/var/log/messages[COLOR="#FF0000"]:345:[/COLOR]2020-04-28T17:50.... bla bla bla
Die Zeile 345 erscheint also stets zwischen Pfad/Dateiname und Logeintrag, getrennt von je einem Doppelpunkt. Hier kann ich jetzt nicht mehr so einfach durch String-Beschneidung nach dem Doppelpunkt filtern, da ich nicht nach dem ersten, sondern zweiten filtern müsste. Ein dritter Doppelpunkt erscheint dann in der Uhrzeit, oder bei BigRonin war es dann ein Logeintrag von AvrLogger, wo ein Teil seines Textes fehlte, der einen weiteren Doppelpunkt enthielt.
Wie filter ich also die Zeilennummer das es am Ende vielleicht so aussieht:
Code:
Treffer in /var/log/messages, Zeile 345 gefunden
2020-04-28T17:50.... bla bla bla
Anmerkung der Redaktion. RegEx ist und bleibt für mich ein Buch mit sieben Siegeln, daher kann ich mir hier auch nicht mit sed oder ähnlichem weiterhelfen. In diesen Dingen ist PsychoHH König... aber ich wollte ihn erstmal nicht damit nerven. Auch hatte das für mich jetzt nicht sooooo einen hohen Stellenwert gehabt.... bis jetzt.
Tommes