正则表达式将domino http日志修改为Piwik导入的通用格式

时间:2013-06-05 09:17:53

标签: regex bash lotus-domino matomo

我需要将旧的http日志文件从我的Domino网络服务器导入我的piwik跟踪。 问题是用户登录时的日志格式。 正常/良好格式示例:

123.123.123 www.example.com - [17/Mar/2013:00:00:39 +0100] "GET /example.org HTTP/1.1" 200 3810 "" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" 234 "" "example"

格式错误示例 - 如果用户已登录

,则会生成
123.123.123 www.example.com  "CN=SomeUser/OU=SomeOU/O=SomeO" - [17/Mar/2013:00:00:39 +0100] "GET /example.org HTTP/1.1" 200 3810 "" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" 234 "" "example

我正在寻找一个单行bash来删除那些CN信息(如果包含它)。

更新
这是我的解决方案,让一个班轮将多米诺骨牌日志文件导入piwik。也许有一天有人会找到这个东西而不必翻转他的桌子

for i in `ls -v *.log`; do date && echo " bearbeite" $i && echo " "  && awk '{sub(/ +"CN=[^"]+" +/," - ")}1' $i  grep -v http.monitor | grep -v nagios  > $i.cleanTmp && python /var/www/piwik/misc/log-analytics/import_logs.py --url=http://127.0.0.1/piwik --idsite=8 $i.cleanTmp --dry-run && rm $i.cleanTmp; done;

2 个答案:

答案 0 :(得分:2)

如果您需要纯解决方案您可以执行以下操作:

示例文件

cat >infile <<XXX
123.123.123 www.example.com  "CN=SomeUser/OU=SomeOU/O=SomeO" - [17/Mar/2013:00:00:39 +0100] "GET /example.org HTTP/1.1" 200 3810 "" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" 234 "" "example"
XXX

while read x; do
    [[ $x =~ \ +\"CN=[^\"]+\"\ + ]] && x=${x/$BASH_REMATCH/ }
    echo $x
done <infile

输出:

123.123.123 www.example.com - [17/Mar/2013:00:00:39 +0100] "GET /example.org HTTP/1.1" 200 3810 "" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" 234 "" "example"

它解析以空格开头的字符串,然后是"CN=,然后解析任何非"个字符,然后是",然后是一些空格。如果发现这个模式,它将替换为空格。

如果日志文件很大(> 1MB)并且应该定期执行,那么请使用而不是纯解决方案。

awk '{sub(/ +"CN=[^"]+" +/," ")}1' infile

答案 1 :(得分:0)

所以你只想删除"CN=SomeUser/OU=SomeOU/O=SomeO"部分?

匹配的正则表达式如下所示:

"CN=\w+\/OU=\w+\/O=\w+"