2009-04-17 23 views
0

我想解析來自日誌文件的各種信息,其中一些放在方括號內。例如:awk或sed:抓取[文本]的最佳方法

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

什麼是從這些行中使用sed,awk或其他unix實用程序來抓取'someuserid'的優雅方式?

回答

7

cut
使用這樣的:cut -f2 -d[ | cut -f1 -d]

[email protected]:~> YOURTEXT="Tue, 06 Nov 2007 10:04:11 INFO  processor:receive: [someuserid], [somemessage] msgtype=[T]" 
[email protected]:~> SOMEID=`echo $YOURTEXT | cut -f2 -d[ | cut -f1 -d]` 
[email protected]:~> echo $SOMEID 
someuserid 
+1

不錯,我不知道切。精美的作品。 – Parand 2009-04-17 08:12:57

0

如果你想要做的事與所有括號內的領域,我會用Perl:

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

使用bash外殼

while read -r line 
do 
    case "$line" in 
     *processor*receive*) 
      t=${line#*[} 
      echo ${t%%]*} 
      ;; 
    esac 
done < "file" 
0
sed -n '/INFO/{s/.[^[]*\[//;s/\].*//p}' file 
0

使用AWK:

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

我發現多個分隔符不某些舊版本的AWK的工作。如果沒有,你可以使用兩個awk:

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