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

AWK の使用:

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

AWK の一部の古いバージョンでは、複数の区切り文字が機能しないことがわかりました。そうでない場合は、2 つの awks を使用できます。

cat file | awk -F[ '{print $2}' | awk -F] '{print $1}'
于 2010-03-17T09:21:22.503 に答える
0
sed -n '/INFO/{s/.[^[]*\[//;s/\].*//p}' file
于 2010-03-17T08:36:33.527 に答える
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 に答える