0

我正在尝试从日志文件中解析各种信息,其中一些放在方括号内。例如:

Tue, 06 Nov 2007 10:04:11 INFO     processor:receive: [someuserid], [somemessage]  msgtype=[T]

使用 sed、awk 或其他 unix 实用程序从这些行中获取“someuserid”的优雅方法是什么?

4

5 回答 5

7


这样使用它:cut -f2 -d[ | cut -f1 -d]

bart@hal9k:~> YOURTEXT="Tue, 06 Nov 2007 10:04:11 INFO     processor:receive: [someuserid], [somemessage]  msgtype=[T]"
bart@hal9k:~> SOMEID=`echo $YOURTEXT | cut -f2 -d[ | cut -f1 -d]`
bart@hal9k:~> echo $SOMEID
someuserid
于 2009-04-17T08:07:41.817 回答
0

如果你想对所有带括号的字段做点什么,我会使用 Perl:

perl -lne '
    my @fields = /\[(.*?)\]/g;
    # do something with @fields, like:
    print join(":", @fields);
' logfile ...
于 2009-04-17T16:16:02.657 回答
0

使用 bash 外壳

while read -r line
do
   case "$line" in
        *processor*receive* ) 
            t=${line#*[}
            echo ${t%%]*}
            ;;
   esac
done < "file"
于 2009-11-28T06:37:12.413 回答
0
sed -n '/INFO/{s/.[^[]*\[//;s/\].*//p}' file
于 2010-03-17T08:36:33.527 回答
0

使用 AWK:

cat file | awk -F[\]\[] '{print $2}'

我发现多个分隔符在某些旧版本的 AWK 中不起作用。如果没有,您可以使用两个 awk:

cat file | awk -F[ '{print $2}' | awk -F] '{print $1}'
于 2010-03-17T09:21:22.503 回答