基本上我想做的是解析文件中的行并返回用户名。用户名总是用 < 和 > 括起来,所以我想使用正则表达式来匹配 < 之前(包括)之前的所有内容以及之后(包括)> 之后的所有内容,然后反转我的匹配。我知道 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
但是,在运行我的脚本时,没有返回任何内容,尽管当我用逆匹配的正则表达式测试正则表达式时,它完全符合我的要求。我究竟做错了什么?