Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk 从一行中提取多个信息_Awk_Sed_Grep - Fatal编程技术网

Awk 从一行中提取多个信息

Awk 从一行中提取多个信息,awk,sed,grep,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:

我有来自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实现这一点?

awk方法:

awk -F'\' '{gsub(/:.*$/,"",$3); print $3, $11}' file
perl -nle 'print $1," ",$2 if /\\ip\\([^\\]+):.*?\\name\\([^\\]+)/' file
输出:

192.168.10.22 ^3exc3ls!or_^87
192.168.10.21 Moody_dog55

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

gsub(/:.*$/,“”,$3)-正在从IP地址删除端口号


perl方法:

awk -F'\' '{gsub(/:.*$/,"",$3); print $3, $11}' file
perl -nle 'print $1," ",$2 if /\\ip\\([^\\]+):.*?\\name\\([^\\]+)/' file

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

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

感谢您提供此解决方案@Kent