基本的に私がやりたいことは、ファイル内の行を解析してユーザー名を返すことです。ユーザー名は常に < と > で囲まれているため、正規表現を使用して < の前 (を含む) のすべてと、> の後 (および含む) のすべてを照合し、一致を反転させたいと考えています。grep -vE でこれができるはずだと理解しています。
これまでのところ、私のスクリプトは次のようになります。
#!/bin/bash
while read line; do
echo $line | grep -vE '(.*<)|(>.*)'
done < test_log
また、test_log は以下で構成されます。
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
ただし、スクリプトを実行しても何も返されませんが、regexpal のようなもので逆一致を使用して正規表現をテストしても、まさに私が望んでいることを実行します。私は何を間違っていますか?