Zum Beispiel habe ich eine Protokolldatei mit diesem Eintrag:
[Mi Aug 08 11:39:41 2012] [Fehler] [Client 155.94.70.224] ModSecurity: [Datei "/etc/httpd/modsecurity.d/rules/base_rules/modsecurity_crs_20_protocol_violations.conf"] [Zeile "271"] [ id "960020"] [rev "2.2.5"] [msg "Pragma-Header erfordert Cache-Control-Header für HTTP / 1.1-Anforderungen."] [Schweregrad "NOTICE"] [Tag "RULE_MATURITY / 5"] [Tag "RULE_ACCURACY / 7 "] [tag" https://www.owasp.org/index.php/ModSecurity_CRS_RuleID-960020 "] [tag" PROTOCOL_VIOLATION / INVALID_HREQ "] [tag" http://www.bad-behavior.ioerror.us/ Dokumentation / Funktionsweise / "] Warnung. String-Übereinstimmung "HTTP / 1.1" bei REQUEST_PROTOCOL. [Hostname "webmail.white-art.co.uk"] [uri "/ horde / themes / graphics / tree / plusonly.
Ich möchte alle Zeichenfolgenpaare extrahieren, die mit dem Zeichen beginnen [
und mit enden ]
. Ich kann cut oder awk verwenden, um mit einem einzelnen Trennzeichen zu extrahieren, aber ich muss eine Zeichenfolge zwischen Anfang [
und Ende extrahieren ]
. wie man es erreicht?
Zum Beispiel muss ich extrahieren:
"[Tag" RULE_ACCURACY / 7 "]"
und
"[Schweregrad" HINWEIS "]"
aus dem Protokoll.
Ich habe eine Lösung gefunden, bei der ich zuerst das Protokoll auflösen muss, indem ich nach jeder Zeile eine neue Zeile hinzufüge ]
und dann mit grep nach der erforderlichen Zeichenfolge suche. Gibt es einen besseren Weg, dies zu tun?