我正在尝试从日志文件中解析各种信息,其中一些放在方括号内。例如:
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 ...
使用 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}'