ログファイルからさまざまな情報を解析しようとしています。ログファイルの一部は角かっこで囲まれています。例えば:
Tue, 06 Nov 2007 10:04:11 INFO processor:receive: [someuserid], [somemessage] msgtype=[T]
sed、awk、またはその他のUNIXユーティリティを使用して、これらの行から「someuserid」を取得するためのエレガントな方法は何ですか?
カット
はこのように使用します: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
括弧で囲まれたすべてのフィールドで何かをしたい場合は、Perlを使用します。
perl -lne '
my @fields = /\[(.*?)\]/g;
# do something with @fields, like:
print join(":", @fields);
' logfile ...
AWK の使用:
cat file | awk -F[\]\[] '{print $2}'
AWK の一部の古いバージョンでは、複数の区切り文字が機能しないことがわかりました。そうでない場合は、2 つの awks を使用できます。
cat file | awk -F[ '{print $2}' | awk -F] '{print $1}'
sed -n '/INFO/{s/.[^[]*\[//;s/\].*//p}' file
bash シェルの使用
while read -r line
do
case "$line" in
*processor*receive* )
t=${line#*[}
echo ${t%%]*}
;;
esac
done < "file"