awk或sed:获取此文本的最佳方式

时间:2009-04-17 08:05:04

标签: regex sed awk

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

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

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

5 个答案:

答案 0 :(得分:7)

cut 使用它: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

答案 1 :(得分:0)

如果您想对所有括号内的字段执行某些操作,我会使用Perl:

perl -lne '
    my @fields = /\[(.*?)\]/g;
    # do something with @fields, like:
    print join(":", @fields);
' logfile ...

答案 2 :(得分:0)

使用bash shell

while read -r line
do
   case "$line" in
        *processor*receive* ) 
            t=${line#*[}
            echo ${t%%]*}
            ;;
   esac
done < "file"

答案 3 :(得分:0)

sed -n '/INFO/{s/.[^[]*\[//;s/\].*//p}' file

答案 4 :(得分:0)

使用AWK:

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

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

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