La tuyauterie de grep et en utilisant les regex

Fondamentalement, ce que je veux faire est d'analyser des lignes dans un fichier et le retour des noms d'utilisateurs. Les noms d'utilisateur sont toujours entouré en < et >, donc je veux utiliser les regex pour correspondre à tout avant (et y compris) la < et tout ce qui suit (et y compris) la >, puis inverser mon match. Je comprends que grep -vE devrait être capable de faire cela.

Mon script ressemble un peu à quelque chose comme ça pour l'instant:

#!/bin/bash
while read line; do
        echo $line | grep -vE '(.*<)|(>.*)'
done < test_log

Et test_log se compose des éléments suivants:

Mar  1 09:28:08 (IP redacted) dovecot: pop3-login: Login: user=<emcjannet>, method=PLAIN, rip=(IP redacted), lip=(IP redacted)
Mar  1 09:27:53 (IP redacted) dovecot: pop3-login: Login: user=<dprotzak>, method=PLAIN, rip=(IP redacted), lip=(IP redacted)
Mar  1 09:28:28 (IP redacted) dovecot: imap-login: Login: user=<gconnie>, method=PLAIN, rip=(IP redacted), lip=(IP redacted), TLS
Mar  1 09:27:25 (IP redacted) dovecot: imap-login: Login: user=<gconnie>, method=PLAIN, rip=(IP redacted), lip=(IP redacted), TLS

Cependant, lors de l'exécution de mon script, rien n'est renvoyé, en dépit quand je teste la regex dans quelque chose comme regexpal avec une inversion de match c'est exactement ce que je veux. Ce que je fais mal?

  • Je ne comprends pas l'inverser. Le -v signifie "trouver des lignes où ce modèle ne correspond pas". Je pense que la meilleure approche est de saisir le nom d'utilisateur. C'est bien ça?
InformationsquelleAutor Skyline969 | 2013-03-01