2016-11-15 7 views
1

Ich habe diese Saite:Regex ignorieren Wort

[06/Aug/2016: 11:47:29 +0500] [cameroun.tn][/var/log][2] Warning. Match of "rx \\.(jpg|gif|png|js|css|ttf)$" against "REQUEST_FILENAME" required. [file "/var/log"] [line "29"] [td "90"] [msg "wel done"] 

ich diesen regulären Ausdruck mit dem Datum zu extrahieren:

^\[[^][]*[+][0-9]{4}] 

und Nachricht:

\[msg .*\] 

Wie kann ich Ignoriere alle Wörter zwischen dem Datum und der Nachricht, um nur sie mit einer einzigen Übereinstimmung zu erhalten?

+0

Vielleicht '^ \ [[^] [] * [+] [0 -9] {4}] (. *) \ [Msg' und Inhalt der Gruppe 1 abrufen? –

+1

Verwenden Sie Erfassungsgruppen. – Fairy

+1

Was ist die erwartete Ausgabe? Welches Werkzeug benutzen Sie genau? 'Grep'? Mit 'grep' benötigen Sie einen PCRE Regex wie' grep -oP '(? <=^\ [[^] [] * [+] [0-9] {4}]). * (? = \ [ msg) '' –

Antwort

0

Das Muster, das Sie wollen, ist:

^\[([^][]*\+\d{4})\].*\[(msg\s*"[^"]*"\s*)\] 

Demo on Regex101

Was es werde tun Spiel ist und das Datum String zu erfassen, entsprechen den Rest der Zeichenfolge, dann passen und die Nachricht zu erfassen. Anschließend können Sie die Inhalte der Capture-Gruppen extrahieren (ich nehme an, Sie dies aus Ihrer Frage-Tags in bash tun):

pattern='^\[([^][]*\+\d{4})\].*\[(msg\s*"[^"]*"\s*)\]' 
if [[ $string =~ $pattern ]] 
then 
    echo "${BASH_REMATCH[1]} ${BASH_REMATCH[2]}" 
fi 
+0

Danke, können Sie bitte diese Regexp^[([^] [] * \ + \ d {4})]. *. * [(msg \ s * "[^"] * "\ s *)] mit PYTON, um es mit der Python-Compilation von regxp zu kompilieren – user2148747