我正在尝试解析日志文件中的各种信息,其中一些信息放在方括号内。例如:
Tue, 06 Nov 2007 10:04:11 INFO processor:receive: [someuserid], [somemessage] msgtype=[T]
使用sed,awk或其他unix实用程序从这些行中获取'someuserid'的优雅方法是什么?
答案 0 :(得分:7)
cut 使用它: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
答案 1 :(得分:0)
如果您想对所有括号内的字段执行某些操作,我会使用Perl:
perl -lne '
my @fields = /\[(.*?)\]/g;
# do something with @fields, like:
print join(":", @fields);
' logfile ...
答案 2 :(得分:0)
使用bash shell
while read -r line
do
case "$line" in
*processor*receive* )
t=${line#*[}
echo ${t%%]*}
;;
esac
done < "file"
答案 3 :(得分:0)
sed -n '/INFO/{s/.[^[]*\[//;s/\].*//p}' file
答案 4 :(得分:0)
使用AWK:
cat file | awk -F[\]\[] '{print $2}'
我发现多个分隔符在某些旧版本的AWK中不起作用。如果没有,您可以使用两个awks:
cat file | awk -F[ '{print $2}' | awk -F] '{print $1}'