我想解析來自日誌文件的各種信息,其中一些放在方括號內。例如:awk或sed:抓取[文本]的最佳方法
Tue, 06 Nov 2007 10:04:11 INFO processor:receive: [someuserid], [somemessage] msgtype=[T]
什麼是從這些行中使用sed,awk或其他unix實用程序來抓取'someuserid'的優雅方式?
我想解析來自日誌文件的各種信息,其中一些放在方括號內。例如:awk或sed:抓取[文本]的最佳方法
Tue, 06 Nov 2007 10:04:11 INFO processor:receive: [someuserid], [somemessage] msgtype=[T]
什麼是從這些行中使用sed,awk或其他unix實用程序來抓取'someuserid'的優雅方式?
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
如果你想要做的事與所有括號內的領域,我會用Perl:
perl -lne '
my @fields = /\[(.*?)\]/g;
# do something with @fields, like:
print join(":", @fields);
' logfile ...
使用bash外殼
while read -r line
do
case "$line" in
*processor*receive*)
t=${line#*[}
echo ${t%%]*}
;;
esac
done < "file"
sed -n '/INFO/{s/.[^[]*\[//;s/\].*//p}' file
使用AWK:
cat file | awk -F[\]\[] '{print $2}'
我發現多個分隔符不某些舊版本的AWK的工作。如果沒有,你可以使用兩個awk:
cat file | awk -F[ '{print $2}' | awk -F] '{print $1}'
不錯,我不知道切。精美的作品。 – Parand 2009-04-17 08:12:57