从一行中提取多个信息

时间:2017-04-11 08:02:00

标签: awk sed grep

我有来自Quake 3服务器的下一个日志信息

187:38 ClientUserinfo: 1 \ip\192.168.10.22:27960\challenge\-642334061\qport\26940\protocol\68\name\^3exc3ls!or_^87\rate\8000\sex\male\handicap\100\color2\5\color1\4\snaps\20\authc\0\cl_guid\K3F07049EDE8AAF58CC3A979846237D7
390:06 ClientUserinfo: 14 \ip\192.168.10.21:27960\challenge\314934026\qport\62577\protocol\68\name\Moody_dog55\rate\16000\sex\male\handicap\100\color2\5\color1\4\snaps\20\authc\0\cl_guid\7FB6BDD1F08CCCC8CK3E9444930A35CD

我想在文件

中提取IP和名称
192.168.10.22 ^3exc3ls!or_^87
192.168.10.21 Moody_dog55

IP号码和名称可以是任何种类。

如何用sed,awk或grep完成?

2 个答案:

答案 0 :(得分:0)

awk 方法:

awk -F'\' '{gsub(/:.*$/,"",$3); print $3, $11}' file

输出:

192.168.10.22 ^3exc3ls!or_^87
192.168.10.21 Moody_dog55

-F'\' - 将\视为字段分隔符

gsub(/:.*$/,"",$3); - 从IP地址中删除端口号

perl 方法:

perl -nle 'print $1," ",$2 if /\\ip\\([^\\]+):.*?\\name\\([^\\]+)/' file

答案 1 :(得分:0)

您只需删除不需要的内容,例如sed

sed 's/.*ip\\//;s/:.*\\name\\/ /;s/\\.*//' file
192.168.10.22 ^3exc3ls!or_^87
192.168.10.21 Moody_dog55