1

我需要将旧的 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

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

更新:
这是我的解决方案,可以将多米诺骨牌日志文件导入 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;
4

2 回答 2

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
于 2013-06-05T09:29:00.390 回答
0

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

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

"CN=\w+\/OU=\w+\/O=\w+" 
于 2013-06-05T09:24:45.797 回答