基本上我想要做的是解析文件中的行并返回用户名。用户名总是被包围在<和>中,所以我想使用正则表达式来匹配之前(包括)<和之后的所有内容(包括),然后反转我的匹配。我知道grep -vE应该能够做到这一点。管道grep和使用正则表达式
我的脚本看起来有点像这样至今:
#!/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这样的东西来测试正则表达式,其反向匹配正是我想要的。我究竟做错了什么?
我不明白倒置。 -v意思是“找到这种模式不匹配的行”。我认为更好的方法是简单地捕获用户名。这是否准确? – cmonkey 2013-03-01 17:09:57