Apache log grep, awk or sed



我正试图从apache日志中提取电子邮件地址,但现在幸运地使用了awk或grep。

我已经厌倦了下面的内容,但完全失去了

awk  -va="/folder/new/" -vb="_home" 'a {flag=1;next} b {flag=0} flag { print }'

示例日志行:

1.2.5.6 - - [01/Aug/2012:16:53:29 +0100] "GET /folder/new/user@example.com_home/some/rubbish/here/ "https://www.website.com/home.php" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.)"

理想情况下,我需要有一个像下面一样的输出

user@exmaple.com using MSIE 7.0 on Windows NT 5.1

感谢所有帮助

感谢

根据数据的可变性,可以通过指定相关的字段分隔符来实现这一点:

awk -F '[/_()]' '{ print $6, $(NF-1) }' log

输出:

user@example.com compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.

试试这个:

grep "@" apache.log | sed -r 's,.*/folder/new/([^@]+@.*)_home.*"([^"]*)"$,1 using 2,'

我假设"/folder/new/"one_answers"_home"总是这样出现。

这是使用GNUsed 4.2.1版在您的生产线上进行测试的。

您可以在bash 中使用正则表达式

regex='/folder/new(.*)_home.*"compatible; (.*); (.*);.*"'
[[ $logStr =~ $regex ]]
user="${BASH_REMATCH[1]}"
browser="${BASH_REMATCH[2]}"
os="${BASH_REMATCH[3]}"
echo "$user using $browser on $os"

我不确定正则表达式是否完全正确;我可能已经对日志消息中出现的固定字符串做了一些假设,但这些字符串是不可靠的。但如果你对这种方法感兴趣,希望这里有足够的东西让你开始。

最新更新